ログインテンプレートをapp + router-outletに置き換えたログインページを作成しようとしています。* ngIf +テンプレート変数+ loadIntoLocationを使用してプログラムでコンポーネントを表示する
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>
コンポーネント
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");
}
}
私がしようとしています: 1) 3 logedinログイン成功アップデートにログインテンプレート 2)を示し)それに応じてログインを非表示にする 4)ショーアプリ
エラーMSGでのこの結果は:
Could not find variable header
私は#ヘッダーは* ngIfテンプレートの適用範囲の下でローカル変数であるため、これが起こっている理解しています。私はいくつかの方法で成功せずにこのテクニックを解決しようとしました(* ngIfとローカル変数を使用してテンプレートをスワップしてloadIntoLocationを使用する)。
私のアプリケーションフレーム(ナビゲーション+ヘッダを意味する)は<ルータ出口経由でロードされていません>したがって、ルーティングを使用せずにフレームコンポーネントをロードする条件付きの方法が必要です(<ルータアウトレット>私の場合は)、ログインが成功裏に返されました。
ヘルプは非常に訴求されます。
注:矢印の機能を使用する場合は、= VARのVMを必要とするこれをいけません。 – Dinistro
あなたの問題を解決するためにngの代わりに[hidden]を使用することを確認できますか? –
なぜ私はあなたが 'DynamicComponentLoader'で何かをやっているのか分かりません。なぜ、 'Header'と' Navigation'コンポーネントを作成し、それらをテンプレートにバインドしないのですか? – Dinistro