将Angular 1转换为Angular 2 ngInit函数

时间:2016-06-10 17:06:34

标签: javascript angularjs angular

在angular1中,我们根据ng-if条件调用函数ng-init。以下代码表示如果第一个div匹配日期和&&然后它将检查第二个条件,检查或未检查。如果选中则会自动调用play()函数,如果没有检查则调用pause函数。

<div ng-if="ramadan.date === date && ramadan.time === clock">
  <div ng-if="ramadan.checked" ng-init="play()"></div>
  <div ng-if="!ramadan.checked" ng-init="pause()"></div>
</div>

我想通过angular2 typescript转换此代码。有没有办法根据角度2中的条件自动调用函数?

3 个答案:

答案 0 :(得分:11)

Angular2中没有ng-init。您可以自己轻松地创建这样的指令。

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

@Directive({
    selector: '[ngInit]'
})
export class NgInit {
    @Input() ngInit;
    ngOnInit() {
        if (this.ngInit) {
            this.ngInit();
        }
    }
}

然后像

一样使用它
<div *ngIf="ramadan.date === date && ramadan.time === clock">
  <div *ngIf="ramadan.checked" [ngInit]="play"></div>
  <div *ngIf="!ramadan.checked" [ngInit]="pause"></div>
</div>

答案 1 :(得分:4)

工作代码,

自定义指令:

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

@Directive({ selector: '[myCondition]' })

export class ngInitDirective {
  constructor() { }


  @Input() set myCondition(condition: boolean) {
    if (!condition) {
      console.log("hello")
    } else {
      console.log("hi")
    }
  }
}

在模板中:

<ion-label *ngIf="setting1.date === current_date && setting1.time === current_time">
          <div *myCondition="setting1.checked === condition" >Play</div>
          <div *myCondition="!setting1.checked === !condition">pause</div>
      </ion-label>

答案 2 :(得分:1)

您可以在组件类中使用ngOnInit方法,但请记住实现 OnInit 接口。

以下是一个例子:

@Component({
  selector: 'ramadan',
  template: `<div>Ramadan</div>`
})
class Ramadan implements OnInit {
  ngOnInit() {
    this.play();
  }
}

您可以了解有关ngOnInit here的更多信息。