दिलचस्प पोस्ट
Regex का उपयोग करने के बजाय स्ट्रिंग उत्पन्न करने के लिए उन्हें मैच विंडोज़ में स्लीप फ़ंक्शन, सी का उपयोग करें आईपैड पर चलने के लिए आईफोन ऐप को रोकें एंडोमोमारी त्रुटि के बिना एंड्रॉइड में बड़ी फ़ाइल अपलोड करें एक प्रोटोकॉल में केवल-प्राप्त संपत्ति की आवश्यकता क्यों नहीं है, जो एक संपत्ति से संतुष्ट होती है? जेनरिक -उपन और बंद निर्मित प्रकार क्रिप्टोग्राफिक एक्सपैशन: पैडिंग अमान्य है और इसे हटाया नहीं जा सकता है और व्यूस्टेट मैक का सत्यापन विफल रहा है जेनेटिक के साथ कथन का प्रयोग करना: ISet का उपयोग <> = System.Collections.Generic.ISet <> स्विफ्ट प्रदर्शन: सॉर्टिंग एरेज़ जी ++ के साथ बहुस्तृत कोड संकलित करना पैकेज के भीतर मॉड्यूल के सदस्यों को कैसे आयात करें एक रंग फिल्टर को एक Drawable परिवर्तनों में जोड़ना सभी बटन समान Drawable का उपयोग करते हुए मैं केवल WPF में संख्यात्मक इनपुट को स्वीकार करने के लिए एक टेक्स्टबॉक्स कैसे प्राप्त करूं? मेरा। सुरक्षा नियमों में जोड़ा गया नियम और नियम को ध्यान में नहीं रखा गया है त्रुटि को ठीक कैसे करें: प्रारंभिक स्ट्रिंग का प्रारूप सूचकांक से शुरू होने वाले विनिर्देशों के अनुरूप नहीं है ::

AngularJS: AngularJS ने एक टेम्पलेट गाया है के बाद अतिरिक्त कोड को चलाने के लिए कैसे?

मेरे पास DOM में एक कोणीय टेम्पलेट है जब मेरे नियंत्रक को सेवा से नया डेटा मिलता है, तो वह मॉडल को $ गुंजाइश में अपडेट करता है, और टेम्पलेट को फिर से प्रस्तुत करता है। सभी अच्छे अब तक

समस्या यह है कि टेम्पलेट के पुन: प्रस्तुत किए जाने और DOM (इस स्थिति में एक jQuery प्लग इन) के बाद भी मुझे कुछ अतिरिक्त कार्य करने की आवश्यकता है।

ऐसा लगता है कि सुनने के लिए कोई घटना होनी चाहिए, जैसे कि बाद में रेंडर, लेकिन मुझे ऐसी कोई चीज नहीं मिलती। हो सकता है कि निर्देश जारी हो जाए, लेकिन ऐसा लग रहा था जितना जल्दी हो सके।

मेरी समस्या की रूपरेखा एक जेएसएफडियल है: बेला-अंगुलर आईएसएसई

== अपडेट ==

सहायक टिप्पणियों के आधार पर, मैंने तदनुसार डोम हेरफेर को संभालने के निर्देश के लिए स्विच किया है, और निर्देश के अंदर एक मॉडल $ वॉच कार्यान्वित किया है। हालांकि, मैं अभी भी एक ही आधार मुद्दा रहा है; टेम्पलेट के संकलन और डाओम में सम्मिलित होने से पहले $ घड़ी ईवेंट के अंदर का कोड, इसलिए, jquery प्लगइन हमेशा एक खाली तालिका का मूल्यांकन कर रहा है

दिलचस्प बात यह है कि अगर मैं एसिंक कॉल को निकालता हूं, तो पूरी चीज ठीक हो जाती है, इसलिए यह सही दिशा में एक कदम है।

इन परिवर्तनों को प्रतिबिंबित करने के लिए यहां मेरा अपडेट किया गया है: http://jsfiddle.net/uNREn/12/

Solutions Collecting From Web of "AngularJS: AngularJS ने एक टेम्पलेट गाया है के बाद अतिरिक्त कोड को चलाने के लिए कैसे?"

यह पोस्ट पुरानी है, लेकिन मैं आपको अपना कोड बदलता हूं:

scope.$watch("assignments", function (value) {//I change here var val = value || null; if (val) element.dataTable({"bDestroy": true}); }); } 

देखें: http://jsfiddle.net/dnzY9/

मुझे आशा है कि यह आपकी सहायता करेगी

सबसे पहले, प्रतिपादन के साथ गड़बड़ करने का सही स्थान निर्देश है। मेरी सलाह यह है कि DOM को इस तरह के निर्देशों के अनुसार jQuery के प्लगिन को जोड़ना चाहिए।

मुझे एक ही समस्या थी और इस स्निपेट के साथ आया था। ng-repeat $evalAsync जैसे निदेशों के बाद आपके कोड को रन बनाए जाने के लिए $watch और $evalAsync का उपयोग करता है और {{ value }} जैसे टेम्पलेट्स को गाया गया है।

 app.directive('name', function() { return { link: function($scope, element, attrs) { // Trigger when number of children changes, // including by directives like ng-repeat var watch = $scope.$watch(function() { return element.children().length; }, function() { // Wait for templates to render $scope.$evalAsync(function() { // Finally, directives are evaluated // and templates are renderer here var children = element.children(); console.log(children); }); }); }, }; }); 

आशा है कि यह आपको कुछ संघर्ष को रोकने में मदद कर सकता है।

मिस्को की सलाह के बाद, यदि आप एसिंक ऑपरेशन चाहते हैं, तो इसके बजाय $ टाइमआउट () (जो काम नहीं करता है)

 $timeout(function () { $scope.assignmentsLoaded(data); }, 1000); 

$ evalAsync () का उपयोग करें (जो काम करता है)

 $scope.$evalAsync(function() { $scope.assignmentsLoaded(data); } ); 

बेलाल मैंने डेटा "डेटा की पंक्ति हटाएं" लिंक भी जोड़ दिया है जो डेटा को बदलता है यह दर्शाने के लिए कि डेटा कार्य बदलता है, $ scope.assignments को संशोधित करेगा, डेटा / मॉडल में बदलाव का अनुकरण करेगा।

संकल्पनात्मक अवलोकन पृष्ठ का रनटाइम अनुभाग बताता है कि जब आप वर्तमान स्टैक फ़्रेम के बाहर कुछ होने की आवश्यकता होती है, लेकिन ब्राउज़र रेंडर करने से पहले evalAsync का उपयोग किया जाना चाहिए। (यहां अनुमान लगाया जा रहा है … "वर्तमान स्टैक फ़्रेम" में शायद कोयोनर डोम अपडेट शामिल हैं।) यदि आपको ब्राउज़र रेंडर करने के बाद कुछ होने की आवश्यकता है तो $ टाइमआउट का उपयोग करें

हालांकि, जैसा कि आप पहले से ही पता चल चुके हैं, मुझे नहीं लगता है कि यहां एसिंक ऑपरेशन की कोई ज़रूरत नहीं है।

मैंने सबसे सरल (सस्ता और हंसमुख) समाधान पाया है, एनजी-शो = "कुछ फंक्शन" "" "" "" "" "" "या" कुछ फंक्शन " यह फ़ंक्शन तब चलाया जाएगा जब स्पैन एलिमेंट प्रदर्शित किया जाना चाहिए या नहीं। इस फ़ंक्शन में कोई अन्य कोड निष्पादित करें।

मुझे पता है यह काम करने का सबसे शानदार तरीका नहीं है, हालांकि, यह मेरे लिए काम करता है …

मेरे पास ऐसी ही स्थिति थी, हालांकि थोड़ा उलट होने पर जहां एनीमेशन शुरू होने पर मुझे लोडिंग सूचक को हटाने की ज़रूरत थी, मोबाइल उपकरणों के कोण पर एनीमेशन की तुलना में बहुत तेज़ी से आरंभ किया जा रहा था, और एनजी-क्लॉक का उपयोग करना अपर्याप्त था क्योंकि लोडिंग सूचक किसी भी वास्तविक डेटा प्रदर्शित होने से पहले अच्छी तरह से निकाल दिया गया। इस मामले में मैंने पहले रिटर्न 0 फ़ंक्शन को पहले रेंडर तत्व में जोड़ दिया था, और उस फ़ंक्शन में लोड करने वाले सूचक को छुपाए जाने वाले वर्जन को फ़्लिप किया गया था। (बेशक मैंने इस फ़ंक्शन द्वारा ट्रिगर लोडिंग सूचक को एनजी-छिपाना जोड़ा।

मुझे लगता है कि आप $ evalAsync http://docs.angularjs.org/api/ng.$rootScope.Scope#$evalAsync की तलाश में हैं

अंत में मुझे समाधान मिला, मैं अपने संग्रह को अपडेट करने के लिए एक आरईएसईटी सेवा का उपयोग कर रहा था। सांकेतिक jquery को परिवर्तित करने के लिए अनुवर्ती कोड है:

 $scope.$watchCollection( 'conferences', function( old, nuew ) { if( old === nuew ) return; $( '#dataTablex' ).dataTable().fnDestroy(); $timeout(function () { $( '#dataTablex' ).dataTable(); }); }); 

मुझे यह बहुत बार करना पड़ा है मेरे पास एक निर्देश है और मॉडल सामान के बाद कुछ jquery सामान करने की आवश्यकता है जो पूरी तरह से DOM में भरी हुई है। इसलिए मैंने अपने तर्क को इस लिंक में डाल दिया: निर्देश का कार्य और सेट टाइमआउट में कोड को लपेटो (फ़ंक्शन () {…..}, 1); डीओएम लोड होने के बाद सेटटिमआउट आग लगाएगा और कोड को निष्पादित करने से पहले डीओएम लोड होने के बाद 1 मिलिसेकंड कम से कम समय है। यह मेरे लिए काम करने लगता है लेकिन मैं चाहता हूं कि कोणीय ने एक घटना को एक बार उठाया, जब टेम्पलेट लोड हो रहा था ताकि उस टेम्पलेट द्वारा उपयोग किए गए निर्देश jquery सामान कर सकें और DOM तत्वों तक पहुंच सकें। उम्मीद है की यह मदद करेगा।

आप एक निर्देश भी बना सकते हैं जो आपके कोड को लिंक फ़ंक्शन में चलाता है।

देखें कि स्टैकवरफ्लो उत्तर

न ही $ का दायरा। $ EvalAsync () या $ टाइमआउट (एफ एन, 0) मेरे लिए विश्वसनीय तरीके से काम किया है

मुझे दो को गठबंधन करना था मैंने एक निर्देश दिया है और अच्छे उपाय के लिए डिफ़ॉल्ट मान की तुलना में एक प्राथमिकता भी रखी है। यहां इसके लिए एक निर्देश है (नोट मैं निर्भरता इंजेक्ट करने के लिए एनजीआईआई का उपयोग करता हूं):

 app.directive('postrenderAction', postrenderAction); /* @ngInject */ function postrenderAction($timeout) { // ### Directive Interface // Defines base properties for the directive. var directive = { restrict: 'A', priority: 101, link: link }; return directive; // ### Link Function // Provides functionality for the directive during the DOM building/data binding stage. function link(scope, element, attrs) { $timeout(function() { scope.$evalAsync(attrs.postrenderAction); }, 0); } } 

निर्देश को कॉल करने के लिए, आप ऐसा करेंगे:

 <div postrender-action="functionToRun()"></div> 

यदि आप इसे एनजी-दोहराने के बाद चलाना चाहते हैं, तो मैं अपने एनजी-दोहराने और एनजी-अगर = "$ last" में खाली अवधि जोड़ता हूं:

 <li ng-repeat="item in list"> <!-- Do stuff with list --> ... <!-- Fire function after the last element is rendered --> <span ng-if="$last" postrender-action="$ctrl.postRender()"></span> </li> 

मैं एक बहुत सरल समाधान के साथ आया था। मुझे यकीन नहीं है कि यह ऐसा करने का सही तरीका है, लेकिन यह व्यावहारिक रूप से काम करता है चलिए सीधे देखते हैं कि हम क्या प्रदान करना चाहते हैं। उदाहरण के लिए, जिसमें कुछ ng-repeat निर्देश शामिल हैं, मैं अनुच्छेदों या पूरे एचटीएमएल के पाठ की लंबाई (आपके पास अन्य चीजें हो सकती है!) के लिए देखता हूँ निर्देश इस तरह होंगे:

 .directive('myDirective', [function () { 'use strict'; return { link: function (scope, element, attrs) { scope.$watch(function(){ var whole_p_length = 0; var ps = element.find('p'); for (var i=0;i<ps.length;i++){ if (ps[i].innerHTML == undefined){ continue } whole_p_length+= ps[i].innerHTML.length; } //it could be this too: whole_p_length = element[0].innerHTML.length; but my test showed that the above method is a bit faster console.log(whole_p_length); return whole_p_length; }, function (value) { //Code you want to be run after rendering changes }); } }]); 

ध्यान दें कि कोड वास्तव में प्रतिपादन के बजाय पूर्ण रेंडरिंग के बाद चलाता है। लेकिन मुझे लगता है कि ज्यादातर मामलों में जब भी परिवर्तन हो जाते हैं तब भी आप परिस्थितियों को संभाल सकते हैं। इसके अलावा आप अपने पीसी के साथ इस p लंबाई (या कोई अन्य उपाय) की तुलना करने के बारे में सोच सकते हैं यदि आप अपना कोड पूरा करने के बाद केवल एक बार अपना कोड चलाने के लिए चाहते हैं मैं इस पर किसी भी विचार / टिप्पणी की सराहना करता हूं।

आप कोणीय- UI utils के 'jQuery Passthrough' मॉड्यूल का उपयोग कर सकते हैं मैंने सफलतापूर्वक एक jQuery स्पर्श कैरोसेल प्लगइन को कुछ छवियों में बाँध कर दिया है, जो मैंने वेब सेवा से एसिंक को पुनः प्राप्त किया है और एनजी-दोहराने के साथ उन्हें प्रस्तुत किया है।

कुछ परिदृश्य में जहां आप किसी सेवा को अपडेट करते हैं और एक नए दृश्य (पृष्ठ) पर रीडायरेक्ट करते हैं और फिर आपकी सेवाओं को अपडेट करने से पहले आपका डायरेक्टिव लोड हो जाता है, तो आप $ रूट स्कोप का उपयोग कर सकते हैं। $ $ यदि आपका $ वॉच या $ टाइमआउट विफल रहता है

राय

 <service-history log="log" data-ng-repeat="log in requiedData"></service-history> 

नियंत्रक

 app.controller("MyController",['$scope','$rootScope', function($scope, $rootScope) { $scope.$on('$viewContentLoaded', function () { SomeSerive.getHistory().then(function(data) { $scope.requiedData = data; $rootScope.$broadcast("history-updation"); }); }); }]); 

आदेश

 app.directive("serviceHistory", function() { return { restrict: 'E', replace: true, scope: { log: '=' }, link: function($scope, element, attrs) { function updateHistory() { if(log) { //do something } } $rootScope.$on("history-updation", updateHistory); } }; });