javascript - أنغلار 2 إكسبريسون بارسر و نغ-إينيت ديركتيف




angular typescript (2)

أساسا أنا أبحث عن وسيلة لتنفيذ نظير لتوجيه ngInit 1.x ngInit .

أنا على علم من ngOnInit هوك وحقيقة أنه هو المكان الموصى به لرمز التهيئة. أنا أعتبر ngInit توجيه سريع، طريقة تصريحات لنموذج أو إصلاح مكون لا ينبغي أن تستخدم عموما في رمز الإنتاج مكتوبة جيدا (على الرغم من أن المطور لديه الحق في اختيار ما هو أفضل بالنسبة له / لها).

القيام بشيء من هذا القبيل في توجيه وهمية init

<p [init]="foo = 1; bar()"><p>

ويقيم التعبير أكثر من مرة واحدة ويسبب

أخطاء تحليل النموذج:

خطأ بارسر: لا يمكن أن تحتوي الارتباطات على تخصيصات

خطأ.

في 1.x الزاوي يمكن أن يتم ذلك فقط مع

$parse($attrs.init)($scope)

كيف يمكن استخدام الزاوي 2 محلل وربما تمديد لتقييم foo = 1; bar() foo = 1; bar() نموذج التعبير عن تهيئة المكون؟


مجرد حل بديل ( المخادع التجريبي )، انظر إجابة إستوس عن الحل

init التوجيه:

@Directive({
  selector: '[init]',
  inputs: ['init']
})
export class InitDir {
  init;

  ngOnChanges() {     // `ngOnInit` if you want it to run just once
    if(this.init){
      let iife = function(str){ return eval(str); }.call(this.init[0], this.init[1]);
    }
  }
}

الاستعمال:

@Component({
  selector: 'my-app',
  template: `
    <div>
      <h2 [init]="[this, 'this.name = 1; this.bar();']">Hello {{name}}</h2>
    </div>
  `,
})
export class App {
  constructor() {
    this.name = 'Angular2 (Release Candidate!)'
  }

  bar() {
    alert('Yo Bar!');
  }
}

أنه

@Directive({ selector: '[initialize], [on-initialize]' })
class InitializeDirective {
  @Output() initialize = new BehaviorSubject();
}

و

<div initialize (initialize)="initViaMethodCall(); foo = 'init via assignment'"></div>
<ng-template initialize (initialize)="bar = 'init with no extra markup'"></template>
{{ foo }}
{{ bar }}






angular2-directives