2016-02-24 13 views
22

मुझे अपने कोणीय घटक दृश्य के बाद सितारों में संख्या मानों को बदलने के लिए प्रारंभ करने के बाद कुछ jQuery कोड चलाने की आवश्यकता है।Angular2 ngAfterViewInit कब कॉल किया जाता है?

मैं ngAfterViewInit समारोह में कोड डाल दिया, लेकिन यह नहीं कर रहा है कि क्या मैं इसे की जरूरत है। मैंने फ़ंक्शन में ब्रेक पॉइंट सेट किया है और मुझे लगता है कि मेरे घटक के अधिकांश HTML ने ngAfterViewInit फ़ंक्शन को उस समय तक लोड नहीं किया है। जिन भागों को लोड नहीं किया गया है वे * ngFor निर्देश का उपयोग करके उत्पन्न होते हैं।

मैं कैसे के बाद इस निर्देश एचटीएमएल, जिस पर मैं काम करने के लिए की जरूरत के सभी उत्पन्न किया है मेरी कोड को चलाने के लिए मिल सकता है?

+0

एक नज़र डालें: http://stackoverflow.com/questions/15458609/execute-function-on-page-load – Belakorr

+0

विचार: 'componentDidMount' है एक बहुत सरल अमूर्त https://facebook.github.io /react/docs/component-specs.html इसे केवल बच्चों पर बुलाए जाने के बाद ही बुलाया जाएगा। NgFor एक अवधारणा के रूप में आप सिर्फ मेरे लिए सरल JavaScript '[] .forEach' – basarat

उत्तर

16

जब कहा जाता हो ngAfterViewInit करता है?

ngAfterViewInit() किसी घटक के दृश्य के बाद बुलाया जाना चाहिए, और इसके बच्चों के विचार बनाए गए हैं। मैंने इसका परीक्षण किया, और पाया कि बच्चों के ngAfterViewInit() एस को माता-पिता के ngAfterViewInit() से पहले बुलाया जाता है।

जब आप कहते हैं कि "मेरी घटक के एचटीएमएल के सबसे भी लोड नहीं हुआ हो", क्या आप "लोडेड" द्वारा मतलब है? क्या HTML घटक के टेम्पलेट में HTML है, या इसे किसी अन्य माध्यम से लोड किया जा रहा है (या जेनरेट किया गया है)?

इस निर्देश के बाद मुझे अपना कोड चलाने के लिए कैसे प्राप्त किया जा सकता है जिस पर मुझे संचालित करने की आवश्यकता है?

यह निर्देश कोड देखने में मदद करेगा। यदि निर्देश किसी भी तरह से HTML उत्पन्न करता है जो कोणीय टेम्पलेट्स में निहित नहीं है, तो प्रतिपादन पूर्ण होने पर माता-पिता को सूचित करने के लिए आपको किसी ईवेंट को मैन्युअल रूप से ट्रिगर करने की आवश्यकता हो सकती है (उदा।, आउटपुट प्रॉपर्टी का उपयोग करना)। या आप setTimeout() का उपयोग कर सकते हैं (लेकिन यह विश्वसनीय नहीं होगा)।

मुझे अपने कोणीय घटक दृश्य को सितारों में संख्या मानों को बदलने के लिए आरंभ करने के बाद कुछ jQuery कोड चलाने की आवश्यकता है।

कहाँ से इन संख्या मान मिल रहा है? यदि वे किसी सर्वर से गतिशील रूप से लोड होते हैं, तो डेटा आने पर आप एक ईवेंट ट्रिगर कर सकते हैं और उस बिंदु पर दृश्य अपडेट कर सकते हैं।

इसके अलावा, क्यों नहीं एक घटक है कि एक इनपुट संपत्ति के रूप में एक नंबर लेता है और उत्पन्न सितारों NgFor का उपयोग कर लिखना?

19

मैं ngAfterViewChecked उपयोग किया गया है, जब मैं डोम तैयार किया जा रहा है पर निर्भर हैं।

import {Component, AfterViewChecked} from '@angular/core'; 

export class Spreadsheet implements AfterViewChecked{ 

    ngAfterViewChecked(){ 

    } 
} 
+0

काम का उपयोग जहां ngAfterViewInit बस विफल हो गया क्योंकि कयामत तैयार नहीं है वहाँ – baaroz

+13

दें कि' ngAfterViewChecked' एक से अधिक समय कहा जा सकता है को ध्यान में रखना नहीं है। –

+1

मैं इसे इस तरह से भी कर रहा हूं, क्योंकि टेम्पलेट के ngFor में कुछ HTML तत्वों को लोड करने के बाद मुझे कुछ कोड निष्पादित करने की आवश्यकता है। स्पष्ट रूप से यह सबसे अच्छा समाधान नहीं है, क्योंकि अब मेरे पास कम से कम दो झंडे हैं (उदाहरण के लिए घटक, प्रारंभिक, खोज कॉम्पोनेंट्स प्रारंभ) यह सुनिश्चित करने के लिए कि मैं केवल ngAfterView चेक में एक ही कोड को निष्पादित करता हूं।मैं वास्तव में सोच रहा हूं कि ऐसा करने का सही तरीका क्या होगा। – Jort

संबंधित मुद्दे