javascript - कोणीय 2 अभिव्यक्ति पार्सर और एनजी-इनिट निर्देश




angular typescript (2)

असल में मैं एक समकक्ष को ngInit 1.x ngInit डायरेक्टिव को लागू करने का एक तरीका तलाश रहा हूं।

मुझे ngOnInit हुक के बारे में पता है और यह तथ्य है कि यह प्रारंभिक कोड के लिए अनुशंसित स्थान है। मैं ngInit निर्देश को एक त्वरित, घोषणात्मक तरीके से एक प्रोटोटाइप या एक घटक को ठीक करने का विचार ngInit हूं जिसे आमतौर पर अच्छी तरह लिखित उत्पादन कोड में उपयोग नहीं किया जाना चाहिए (हालांकि डेवलपर को यह चुनने का अधिकार है कि उसके लिए सबसे अच्छा क्या है)।

init डमी निर्देश में ऐसा कुछ करना

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

अभिव्यक्ति का एक से अधिक समय और कारणों का मूल्यांकन करता है

टेम्पलेट पार्स त्रुटियाँ:

पार्सर त्रुटि: बाइंडिंग में असाइनमेंट नहीं हो सकते

त्रुटि।

अंगुल्या 1.x में यह बस के साथ किया जा सकता है

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

कोणीय 2 पार्सर कैसे इस्तेमाल किया जा सकता है और संभवतः foo = 1; bar() का मूल्यांकन करने के लिए बढ़ाया गया है 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