に公開したパブリック メソッドがありwindow
ます。このメソッドは と対話しComponent
、テンプレートで監視している変数を変更します。しかし、値を変更すると、*ngIf()
トリガーされません。
app.component
constructor(private _public: PublicService,) {
window.angular = {methods: this._public};
}
公共サービス
export class PublicService {
constructor(
private _viewManager: ViewManagerComponent,
) {}
CallMe(){
this._viewManager.renderView('page1')
}
}
LayoutManagerComponent
@Component({
selector: 'view-manager',
template: `<page *ngIf="view == 'page1'"></page>`
})
export class ViewManagerComponent {
//This is the variable being watched
view = "page";
renderView = function(type){
console.log(type)
this.view = type;
console.log(this.view)
};
}
したがって、ビューが最初に読み込まれるとき、ビューは空白です。次に、入力すると変数がangular.methods.CallMe()
変更され、コンポーネントのhtmlが表示されます。コンソール機能が正常に呼び出された場合、ビューだけが変更されません。view
page1
renderView
----更新 - まだ動作していません -------
export class ViewManagerComponent {
constructor(private zone:NgZone,private cdRef:ChangeDetectorRef) {
}
view = "page";
@Output() renderView(type){
// type is 'page'
console.log(this.view)
this.zone.run(() => {
// type is 'page'
console.log(this.view)
this.view = type;
// type is 'page1'
console.log(this.view)
});
// type is 'page1'
console.log(this.view)
//cdRef errors:
//view-manager.component.ts:36 Uncaught TypeError: this.cdRef.detectChanges is not a function(…)
this.cdRef.detectChanges();
};
}