如何在执行任务之前等待绑定获取其值

时间:2016-06-10 17:03:29

标签: angular angular2-directives

我有一个在模型上执行任务的指令,但是在运行outcommented循环之前我在等待值为true时遇到问题,这应该决定指令是否应该有一个状态首次启动指令时的truefalse值。

我能想到的唯一解决办法就是使用ngDoCheck,但是一旦this.model完全具有其价值,我就无法找到杀死此方法的方法解决。

在我完成启动后,我不希望它运行。我也尝试过使用ngOnInitAfterViewInit但这些显然对此事没有帮助。

那么我怎样才能在执行任务之前等待this.model获取其值?

import {Directive, ElementRef, Renderer} from '@angular/core';

@Directive({
  selector: '[checkAll]',
  inputs: [
    'model'
  ]
})

export class CheckAllDirective {

  constructor(private _elementRef: ElementRef, private _renderer: Renderer) {

    // TODO: Need to wait for this.model to set before performing this
    // for (let checkbox of this.model) {
    //
    //   if (checkbox.isChecked) {
    //     this.isAllChecked = true;
    //   }
    //   else {
    //     this.isAllChecked = false;
    //   }
    // }

    this.eventHandler = _renderer.listen(_elementRef.nativeElement, ('ontouchstart' in window ? 'touchend' : 'click'), (e) => {

      this.isAllChecked = !this.isAllChecked;

      for (let checkbox of this.model) {
        checkbox.isChecked = this.isAllChecked;
      }
    });
  }
}

1 个答案:

答案 0 :(得分:4)

每次更新输入后都会调用

ngOnChanges

ngOnInit在第一次调用ngOnChanges后调用。

export class CheckAllDirective {

  constructor(private _elementRef: ElementRef, private _renderer: Renderer) {

  }

  ngOnInit() {
     for (let checkbox of this.model) {

       if (checkbox.isChecked) {
         this.isAllChecked = true;
       }
       else {
         this.isAllChecked = false;
       }
     }

  }
}