角度2检查组件

时间:2016-07-07 10:00:35

标签: angular angular2-changedetection

首先,我的代码正在运行。这个问题是关于我是否正在做正确的事情,如果我正在使用角度2的力量。我来自角度1,仍然学习角度2核心概念。

让我们开始吧:

给定角度2应用程序(RC.4)我有一个日历组件,它将日历视为视图。每个日历的日期都是"装饰" RED(忙)或GREEN(免费)取决于API休息呼叫的结果。如果某一天没有数据,那么根本就没有装饰。

所以,我在日历的@component中有以下Observable。一旦解决,组件的属性"条目"充满了回应。 (响应是具有属性" dayStatus"设置为busy / green)的日期对象数组。

 ngOnInit() {
        this.calendarService.getAll().subscribe(
            response => {
                this.entries = response.json();
            }
        );
    }

日历模板有一个ngClass,它解析为decorateDay()处理程序:

<span class="day" *ngFor="let day of week.days"
      [ngClass]="decorateDay(day)">
        {{ day.number }}
</span>

每个&#34; day&#34;因此,以声明的方式查看它是否应该通过处理程序decorateDay(day)装饰为绿色或红色。 它的工作原理如下:&#34; day&#34;作为参数传递,并用作从JSON数组中检索相关对象的键。从对象属性中,字符串绿色/红色传递给视图,并使用ngClass通过CSS进行修饰。

  decorateDay(day) {

       let dayFormatted = day.date.format("YYYY-MM-DD");

       //when observable was resolved entries is not undefined.
       if (typeof this.entries !== 'undefined') {
           let data = this.entries[dayFormatted];
           if (typeof data !== 'undefined') {
               return data.dayStatus;
           }
       }
   }

这就是我的问题:我不知道&#34;条目&#34;将被定义为我检查处理程序是否未定义。看起来当条目填充时,组件 Magically 再次检查处理程序(通过更改检测)。我很好,但是,没有更好的方法来检查组件的属性何时发生变化?也许用@resolved或使用生命周期钩来装饰属性..?我不喜欢我这样做的方式!

希望你们中的一些人能给出一些指示。提前谢谢!

PS:与模型属性的绑定可以在模板本身上完成,但我想使用处理程序,因为它为我提供了更多关于如何在将来装饰给定日期的灵活性。

1 个答案:

答案 0 :(得分:-1)

我可能会误解你的问题,但在我看来,这就是你正在寻找的。

ngOnInit() {
    this.calendarService.getAll().subscribe(
        response => {
            this.entries = response.json();
            // >>> here you know that `entries` was updated
            // just invoke what you want to be executed when `entries` has changed
        }
    );
}