Ich versuche eine Login-Seite zu erstellen, auf der die Login-Vorlage durch die App + Router-Outlet ersetzt wird.Verwenden von * ngIf + Template-Variablen + loadIntoLocation zum programmgesteuerten Laden von Komponenten
Die HTML:
<div class="contentWrapper" *ngIf="!logedin">
Login html....
</div>
<div *ngIf="logedin">
<div #header></div>
<div class="contentWrapper">
<div #nav></div>
<div class="main">
<router-outlet>
</router-outlet>
</div>
</div>
</div>
Die Komponente
export class AppComponent implements OnInit{
logedin = 0;
constructor(
private _dcl:DynamicComponentLoader,
private _elmRef:ElementRef,
private _httpRest:HttpRest //http calls service
){}
ngOnInit(){}
login(){
var vm = this;
//simulated XHR
setTimeout(()=>{
vm.postLoginSuccess()
})
}
postLoginSuccess(){
var vm = this;
vm.logedin = 1;
setTimeout(()=>{
vm.loadApp()
},0);
}
loadApp(){
this._dcl.loadIntoLocation(Header,this._elmRef,"header");
this._dcl.loadIntoLocation(Navigation,this._elmRef,"nav");
}
}
Ich versuche zu: 1) zeigen eine Login-Vorlage 2) Login Erfolg Update logedin 3) Login ausblenden 4) App anzeigen
Dies führt zu einer Fehlermeldung:
Could not find variable header
Ich verstehe dies geschieht, weil die #header eine lokale Variable unter dem Umfang der * ngIf Vorlage ist. Ich habe versucht, diese Technik (das Tauschen von Vorlagen mit * ngIf und lokalen Variablen # anstatt mit loadIntoLocation) auf verschiedene Arten ohne Erfolg zu lösen.
Die Sache ist meine App Frame (dh Navigation + Header) wird nicht über die < Router-Outlet geladen> so brauche ich eine bedingte Möglichkeit zum Laden der Frame-Komponenten ohne Routing zu verwenden (seit < Router-Ausgang> nur Inhalte rendert in meinem Fall), nach dem Login erfolgreich zurückgegeben.
Hilfe wird sehr geschätzt werden.
Hinweis: Sie müssen nicht die var vm brauchen = dies, wenn Sie den Pfeil-Funktionen verwenden. – Dinistro
Können Sie bestätigen, dass Sie [hidden] anstelle von ngIf verwenden, um Ihr Problem zu lösen? –
Ich verstehe nicht, warum Sie etwas mit dem 'DynamicComponentLoader' machen. Warum erstellen Sie nicht eine 'Header'- und eine' Navigation'-Komponente und binden Sie diese in die Vorlage ein. – Dinistro