Ich bin mit Angular2 basteln und habe festgestellt, dass ich nicht in der Lage, eine HTML-Eingabe mit Werten aus dem Controller zu füllen, wenn die Klasse Konstruktor aufgerufen wird. Seltsamerweise füllt die Eingabe die gebundenen Standarddaten nach der Benutzer versucht, den Wert der Eingabe zu ändern. Wie stelle ich anfangs den Wert einer HTML-Eingabe ein, wenn die Ansicht zuerst geladen wird, so dass die Eingabe bereits mit Text gefüllt ist?nicht initialisieren mit Wert in Angular2
Dies ist die HTML-Vorlage ...
<div class="row">
<div class="col-md-3">Username:</div>
<div class="col-md-9"><input [(ngModel)]="CurrentUser.Username" /></div>
</div>
<div class="row">
<div class="col-md-3">Password:</div>
<div class="col-md-9"><input [(ngModel)]="CurrentUser.Password" /></div>
</div>
<div class="row">
<div class="col-md-3"></div>
<div class="col-md-9"><button class="btn btn-sm btn-primary" (click)="signin()">Sign in</button></div>
</div>
Hier ist die Komponente (Controller) ist ...
import {Component} from 'angular2/core'
import {UserService} from '../services/user-current.service';
@Component({
templateUrl: './app/templates/signin.template.html'
})
export class SigninComponent {
private CurrentUser: UserService;
constructor(private userService:UserService) {
this.CurrentUser = userService
}
}
aus Gründen der Referenz, habe ich den Dienst enthalten, dass die Lasten Daten, die ich in der hTML-Eingabe angezeigt werden soll ...
import {Injectable} from "angular2/core";
@Injectable()
export class UserService {
private Username = "TEST";
private Password = "Password";
private UserID = 1;
private LoggedIn = true;
constructor() {}
setUser(userObject) {
this.Username = userObject.Username;
this.Password = userObject.Password;
this.UserID = userObject.UserID;
this.LoggedIn = userObject.LoggedIn;
}
}
auch für die vollständige Klarheit, hier ist die Navigation componen t, die die Ansicht geladen wird (einschließlich des SigninComponent) ...
import {Component} from 'angular2/core'
import {RouteConfig,ROUTER_DIRECTIVES} from 'angular2/router'
import {UsersListComponent} from './users-list.component'
import {DashboardComponent} from './dashboard.component'
import {SigninComponent} from './signin.component'
import {UserService} from '../services/user-current.service';
@Component({
selector: 'nav-top',
templateUrl: './app/templates/nav-top.template.html',
directives: [ROUTER_DIRECTIVES]
})
@RouteConfig([
{path: '/users', name:'UsersList', component: UsersListComponent},
{path: '/signin', name:'Signin', component: SigninComponent},
{path: '/', name:'Dashboard', component: DashboardComponent, useAsDefault: true}
])
export class NavTopComponent{
private CurrentUser;
constructor(private userService:UserService) {
this.CurrentUser = userService
}
}
Ich glaube, die Frage der Verwendung von ngOnInit verwandt ist, die nie als console.log() innerhalb der Funktion zu schießen scheint nicht Feuer . Hier ist ein aktualisierter Blick auf den Code, den ich jetzt für die SigninComponent verwende ... Der ngOnInit wird nicht ausgelöst.
import {Component,OnInit} from 'angular2/core'
import {UserService} from '../services/user-current.service';
@Component({
selector: 'SigninComponent',
templateUrl: './app/templates/signin.template.html',
providers: [UserService]
})
export class SigninComponent implements OnInit{
public CurrentUser;
constructor(public userService:UserService) {
console.log("constructor");
}
ngOnInit() {
this.CurrentUser = this.userService;
console.log("ngOnInit");
}
}
Nein. Keine Fehler ... Ich habe meinen Code aus verschiedenen Tutorials online kopiert. Ich habe die Selektor- und Providereigenschaften hinzugefügt, aber das hat keinen Unterschied gemacht. – Craig
SigninComponent wird als Ansicht mit @RouteConfig geladen. Was ich am seltsamsten finde, ist, dass die HTML-Eingabewerte aktualisiert werden, aber nur, wenn der Benutzer einen Wert in eine der Eingaben eingibt oder auf die Schaltfläche klickt. – Craig
Seltsam es funktioniert auf Plunker, aber nicht auf meinem localhost – Craig