2013-04-26 8 views
5

मेरे पास निर्देश के कई उदाहरण हैं और मैं केवल एक विशिष्ट उदाहरण को लक्षित करना चाहता हूं। उदाहरण के लिए नीचे दिए गए कोड में, मैं यह कैसे सुनिश्चित कर सकता हूं कि class="one" वाला div एकमात्र ऐसा है जो ईवेंट $rootScope.$broadcast('myEvent') द्वारा ट्रिगर किया जाता है।कोणीयजेएस: एकाधिक उदाहरणों के साथ विशिष्ट निर्देश को कैसे लक्षित करें

जे एस:

myApp.directive('myDirective', function() { 
    return { 
     restrict: 'A', 
     controller: function(scope, el, attrs) { 
      scope.$on('myEvent', function() { 
       el.css({left: '+=100'}); 
      }); 
     }, 
    };  
}); 

HTML:

<div my-directive class="one"></div> 
<div my-directive class="two"></div> 
+0

प्रसारण के बजाय वर्ग

<div my-directive id="one"></div> <div my-directive id="two"></div> 

के बजाय और अपने नियंत्रक में

controller: function(scope, el, attrs) { scope.moveElement = function() { el.css({left: '+=100'}); } } 

आईडी का उपयोग और उसके बाद, कर सकते हैं AFAIK यह नहीं है संभव है, क्योंकि यह प्रसारण है क्योंकि सभी बच्चे के स्कॉप्स को ईवेंट अधिसूचना मिलेगी –

उत्तर

4

आप अपने ईवेंट हैंडलर में यह चेक करना चाहिए:

myApp.directive('myDirective', function() { 
    return { 
    restrict: 'A', 
     controller: function(scope, el, attrs) { 
     scope.$on('myEvent', function(ev,args) { 
      //do the check - you could provide a function, a value or something else 
      if(el.hasClass(args.class)){ 
      el.css({left: '+=100'}); 
      } 
     }); 
     }, 
    };  
}); 

फिर $ प्रसारण में पैरामीटर जोड़

$rootScope.$broadcast('myEvent',{class:'one'}) 
+0

धन्यवाद एक लो इस भयानक समाधान के लिए टी। – Wishnu

1

आप एक कॉलबैक कि तब पर $ की कॉलबैक अंदर निष्पादित किया जाता है को संदर्भित जो इस निर्देश के लिए एक नई विशेषता परिभाषित कर सकते हैं:

myApp.directive('myDirective', function() { 
    return { 
     restrict: 'A', 
     scope: { 
      callme: "=" 
     }, 
     controller: function(scope, el, attrs) { 
      scope.$on('myEvent', function() { 
       scope.callme(el) 
      }); 
     }, 
    };  
}); 

एचटीएमएल घोषणा:

<div my-directive class="one" callme="functionDefinedInScope"></div> 

अपने नियंत्रक दायरे में:

$scope.functionDefinedInScope = function(el) { 
    el.css({left: '+=100'}); 
} 

यहां इसके बारे में और पढ़ें: http://docs.angularjs.org/guide/directive (धारा "डी irective परिभाषा ऑब्जेक्ट ")

+0

यह मेरे मामले के लिए काम नहीं कर सकता है। मैं यह उल्लेख करना भूल गया कि मैं किसी भी समय निर्देशों को किसी भी समय लक्षित कर सकता हूं। – teggy

0

आप

angular.element('#one').scope().moveElement() 
संबंधित मुद्दे