У меня есть общедоступный метод, который я предоставил 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()
, он изменяет переменную view
на page1
, которая затем должна отображать html для компонента. Если я использую консольную функцию 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();
};
}