2013-08-01 12 views
7

मेरे पास एक निर्देश है कि मैं एक पृष्ठ पर कई बार उपयोग करता हूं। यह स्थिति बदलता है जब राज्य बदलता है, और नियंत्रक फिर घटना को संभालता है।एकाधिक निर्देश उदाहरण और घटनाएं

समस्या यह है कि घटना दो बार निकाल दी जाती है। मुझे लगता है कि ऐसा क्यों होता है, लेकिन मैं या तो कामकाज या बेहतर डिजाइन खोजने की कोशिश कर रहा हूं। कोई सुझाव?

Plunker उदाहरण: http://plnkr.co/edit/xObOvi253qejphU5arFr

+0

क्या प्रत्येक निर्देश माता-पिता के दायरे की 'foo' संपत्ति को संशोधित करना चाहिए? यदि नहीं, तो बस अपने निर्देश के लिए 'स्कोप: सत्य' जोड़ें और फिर प्रत्येक के पास अपनी 'foo' संपत्ति होगी (और केवल एक ईवेंट आग लग जाएगा)। –

+1

आप प्लंकर में, सभी तत्व एक ही $ स्कोप साझा करते हैं, आप मुख्य नियंत्रक में सीधे $ घड़ी का उपयोग क्यों नहीं करते? – DotDotDot

उत्तर

7

आप अलग गुंजाइश निर्देश पुन: प्रयोज्य बनाने के लिए निर्धारित करने होंगे। एक साधारण फिक्स सिर्फ scope: {} को एक अलग दायरे बनाने के लिए जोड़ना है ताकि जब आप प्रत्येक बटन पर क्लिक करते हैं, तो यह केवल एक बार आग लगती है।

app.directive('myDirective', function() { 
    return { 
    restrict: 'E', 
    scope: {}, // Add this line to create an isolated scope 
    template: '<div>Foo: {{foo}}</div><button ng-click="incrementFoo()">Increment Foo</button>', 
    controller: function ($scope) { 
     $scope.foo = 0; 
     $scope.incrementFoo = function() { 
     $scope.foo += 1; 
     }; 

     $scope.$watch('foo', function() { 
     $scope.$emit('fooChanged', {foo: $scope.foo}); 
     console.log($scope); 
     }); 
    } 
    }; 
}); 
+0

आह ... मुझे याद आया। धन्यवाद! अब समस्या मेरा उदाहरण बनाने में है, मैं भूल गया कि मेरा दायरा वास्तव में '$ location.search()। Foo' के माध्यम से साझा किया जाता है। मैं वास्तव में यह साझा करना चाहता हूं; मैंने सोचा कि यह खुद का दायरा था जिसे साझा किया गया था (यानी $ स्थान के माध्यम से नहीं)। तो मुझे लगता है कि मेरा जवाब नियंत्रक को एक सेवा में दोबारा करने के लिए हो सकता है ... –

+0

@ जेसन कैप्रियोटी यह समझ में आता है। – zsong

+2

मेरा रिफैक्टर प्लंक, निर्देशक के नियंत्रक की बजाय सेवा में संग्रहीत राज्य के साथ .. http://plnkr.co/edit/wwwp3y –

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