2013-10-17 33 views
5

मैं अपने ऐप में पेजिनेशन कार्यक्षमता जोड़ने के लिए अपना पहला कोणीय निर्देश लिखने का प्रयास कर रहा हूं। मैं इसे अभी आसान बना रहा हूं और निर्देशक को केवल नियंत्रक के दायरे को साझा करना चाहता हूं।सरल कोणीय निर्देश

मेरी नियंत्रक में, मैं एक दायरे वाला वर कहा जाता है:

$scope.pages 

मेरी निर्देश के जोड़ने समारोह के अंदर, मैं कर सकते हैं:

console.dir($scope) 

नियंत्रक की गुंजाइश ऑब्जेक्ट की सामग्री को देखने के लिए, लेकिन यदि मैं पृष्ठों की संपत्ति तक पहुंचने का प्रयास करता हूं, तो यह अपरिभाषित के रूप में वापस आता है।

मुझे क्या याद आ रही है?

अग्रिम धन्यवाद।

myDirectives.directive("mdPagination", function(){ 
    return { 
     template: '', 
     restrict: 'A', 
     priority: 1000, 
     scope: false, 
     link: function($scope, el, attrs){ 
      console.dir($scope.pages); //returns undefined 
      el.text('hello world'); 
     }, 
    } 
}); 

संपादित करें: मुझे पता कर रहा हूँ पृष्ठांकन वहाँ मॉड्यूल वहाँ है, लेकिन मेरी जरूरतों मामूली हैं और मैं अपने खुद के निर्माण के लिए एक आसान तरीका निर्देशों का निर्माण करने के तरीके के बारे शुरू करने के लिए किया जाएगा सोचा।

+0

'हटाने के दायरे का प्रयास करें: – akonsu

+0

FALSE' कैसे $ scope.pages अपने नियंत्रक में से भर जाता है?एक AJAX अनुरोध के माध्यम से? –

+0

इन मौजूदा एंगुलरजेएस पेजिनेशन मॉड्यूल @ http://ngmodules.org/modules?query=pagination –

उत्तर

5

आपके पास समस्या है जो निर्देशक लिंकिंग फ़ंक्शंस नियंत्रकों से पहले चलाए जाते हैं, इसलिए आप आमतौर पर इस लिंकिंग चरण के दौरान स्कोप मानों तक नहीं पहुंच सकते हैं। ऐसा करने के कुछ अन्य तरीके हैं। आपकी समस्या को हल करने का सबसे तात्कालिक तरीका $scope.$watch के साथ है। तो इस तरह कुछ काम करना चाहिए:

$scope.watch('pages', function(pages) { 
    console.dir(pages); 
}); 

यह परिस्थितियों के खोने के लिए ठीक काम करता है। मैं आपके नियंत्रक को आपकी घड़ी के लिए एक अभिव्यक्ति (मूल रूप से संपत्ति नाम) में उत्तीर्ण करने के लिए एक विशेषता का उपयोग करके थोड़ा सा घोषित किया गया है। एक साधारण उदाहरण इस प्रकार दिखाई देंगे:

<div my-directive="myProperty"> 

link: function($scope, el, attrs) { 
    $scope.watch(attrs.myDirective, function(value) { 
    //do something you need to do with the value here 
    }); 
} 

हालांकि आप अपने निर्देश के लिए जटिलता बढ़ के रूप में आप सीधे घड़ियों बुला के बिना अपने निर्देश में यह राज्य का प्रबंधन करने के स्वयं के नियंत्रक है देने के लिए कर सकते हैं। यह नियंत्रक या तो scope: true के साथ निर्देश से संबंधित एक बच्चे के दायरे का उपयोग कर सकता है या केवल scope: false के साथ मूल दायरे का उपयोग कर सकता है। आपकी पसंद की आवश्यकता पर निर्भर करेगा। तो फिर तुम हो सकता है:

myDirectives.directive("mdPagination", function(){ 
    return { 
     template: '', 
     restrict: 'A', 
     priority: 1000, 
     controller: ['$scope', '$element', '$attrs', function($scope, $element, $attrs) { 
      console.dir($scope.pages); 

     }], 
     link: function($scope, el, attrs){ 
      $element.text('hello world'); 
     } 
    } 
}); 
-1

डिफ़ॉल्ट रूप से, निर्देशक नियंत्रक के साथ अपना दायरा साझा करता है। कि, आप अपने वस्तु में एक "गुंजाइश" विशेषता, उस तरह नहीं होने चाहिए करने के लिए:

myDirectives.directive("mdPagination", function(){ 
    return { 
     template: '', 
     restrict: 'A', 
     priority: 1000, 
     link: function($scope, el, attrs){ 
      console.dir($scope.pages); 
      el.text('hello world'); 
     }, 
    } 
}); 
+0

में करता है स्कोप विशेषता में कुछ भी नहीं है समस्या के साथ। आप लिंकिंग फ़ंक्शन में विश्वसनीय रूप से $ स्कोप मानों तक पहुंच नहीं सकते हैं। आपको इसके लिए एक घड़ी संलग्न करनी है। –

-1

@Sandro सही है। आपने scope संपत्ति को false पर अपने निर्देश में सेट किया है जिसका अर्थ है कि दायरा नियंत्रक के साथ अपनी गुणों का वारिस नहीं करेगा (या साझा नहीं करेगा)। यदि आप झूठी हटा देते हैं, तो इसे काम करना चाहिए जैसा कि आप चाहते हैं।

कैसे $scope का उपयोग करने के लिए डॉक्स यहां हैं:। http://code.angularjs.org/1.2.0-rc.3/docs/api/ng $ rootScope.Scope

बनाने के निर्देशों के लिए डेवलपर गाइड के बारे में अच्छी जानकारी का एक बहुत कुछ है कैसे अपने निर्देश सेटअप इतना है कि यह आप गुंजाइश आप देता है चाहते हैं। वे दस्तावेज़ यहां हैं: http://code.angularjs.org/1.2.0-rc.3/docs/guide/directive

आशा है कि मदद करता है।

+1

नहीं, यदि आप 'सत्य' के दायरे को सेट करते हैं तो यह निर्देश के लिए एक अलग दायरा बनाता है। http://code.angularjs.org/1.2.0-rc.3/docs/guide/directive –

+2

दरअसल यह विरासत के लिए एक बच्चे का दायरा बनाता है जो विरासत में मिलता है, यदि आप इसे गलत पर सेट करते हैं * वर्तमान स्कोप का उपयोग करता है * सीधे घोषित किया गया है। निष्पक्षता में यह निर्देश डिजाइन का एक काफी भ्रमित पहलू है। –

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