Questions tagged «angular2-changedetection»

11
如何检测@Input()值何时在Angular中更改?
我有一个父组件(CategoryComponent),一个子组件(videoListComponent)和一个ApiService。 我的大部分工作都很好,即每个组件都可以访问json api并通过可观察对象获取其相关数据。 目前,视频列表组件仅获取所有视频,我想将其过滤为特定类别中的视频,我是通过将categoryId传递给子对象来实现的@Input()。 CategoryComponent.html <video-list *ngIf="category" [categoryId]="category.id"></video-list> 这可以正常工作,并且当父CategoryComponent类别更改时,categoryId值将通过传递,@Input()但是我需要在VideoListComponent中进行检测,然后通过APIService(带有新的categoryId)重新请求视频数组。 在AngularJS中,我会$watch在变量上做一个。处理此问题的最佳方法是什么?

5
在Angular中手动触发变更检测
我正在编写一个具有属性的Angular组件Mode(): string。 我希望能够以编程方式设置此属性,而不响应任何事件。 问题在于,在没有浏览器事件的情况下,模板绑定{{Mode}}不会更新。 有没有办法手动触发此更改检测?

24
ExpressionChangedAfterItHasBeenCheckedError说明
请向我解释为什么我不断收到此错误: ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. 显然,我只在开发人员模式下获得它,它在我的生产版本中不会发生,但是这很烦人,我根本不理解在我的开发人员环境中出现错误并不会在产品上显示出来的好处- -可能是由于我缺乏了解。 通常,修复很容易,我将导致代码的错误包装在setTimeout中,如下所示: setTimeout(()=> { this.isLoading = true; }, 0); 或者使用以下构造函数强制检测更改constructor(private cd: ChangeDetectorRef) {}: this.isLoading = true; this.cd.detectChanges(); 但是,为什么我经常遇到这个错误?我想了解它,以便将来可以避免这些漏洞修复。

14
* ngIf中的@ViewChild
题 @ViewChild显示模板中的相应元素后,最优雅的方法是什么? 下面是一个例子。还提供柱塞。 模板: <div id="layout" *ngIf="display"> <div #contentPlaceholder></div> </div> 零件: export class AppComponent { display = false; @ViewChild('contentPlaceholder', {read: ViewContainerRef}) viewContainerRef; show() { this.display = true; console.log(this.viewContainerRef); // undefined setTimeout(()=> { console.log(this.viewContainerRef); // OK }, 1); } } 我有一个默认情况下隐藏其内容的组件。当有人调用show()method时,它变得可见。但是,在Angular 2更改检测完成之前,我无法引用viewContainerRef。我通常将所有必需的动作包装成setTimeout(()=>{},1)上述所示。有没有更正确的方法? 我知道有一个选项ngAfterViewChecked,但它会导致太多无用的调用。 答案(柱塞)



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.