2013-05-17 5 views
6

पर प्रत्येक एनजी-दोहराने का उदाहरण पास करते हैं, मुझे लगता है कि यह सरल होना चाहिए लेकिन मुझे कुछ याद आ रहा है। मैं अपने निर्देश पर नीचे ng-repeat में flowObj कैसे पास कर सकता हूं? मैं इसे अपने निर्देश में पास करना चाहता हूं, फिर क्लिक पर FlowObj पर क्लिक करें, फिर कुछ तर्क लागू करें। मैंने अपने निर्देशएंगुलरजेएस एचटीएमएल में निर्देशांक

scope: { 
    test:"@" 
} 

पर टिप्पणी कोड का उपयोग करने का प्रयास किया लेकिन ऐसा लगता है कि यह मेरे सीएसएस को खराब कर रहा है।

HTML:

<html> 
    <head> 
     <title></title> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
    </head> 
    <body> 
      <div id="center_outer"> 
       <div id="center_inner" ng-controller="CtrlPageFlow"> 
        <div flowclick class="cflow" ng-repeat="flowObj in flows" > 
         {{flowObj.name}} 
        </div> 
       </div> 
      </div> 
    </body> 
</html> 

यहाँ मेरी निर्देश

angular.module('directives', ['opsimut']).directive('flowclick', function() { 
    return { 
     /* 
     scope: { 
      test:"@" // set the attribute name on the directive's scope 
     }, 
     */ 
     link: function(scope, elem, attr) { 
      elem.bind('click', function(scope) { 
       debugger; 
       alert(scope.flowObj); 
       //scope.name += '!'; 
       //scope.$apply(); 
      }); 
     } 
    }; 
}); 

समाधान उत्तर के आधार पर है:

angular.module('directives', ['opsimut']). 
    directive('flowclick', function() { 


     return { 



        link: function(e, elem, attr) { 
        // scope is the directive's scope, 
        // elem is a jquery lite (or jquery full) object for the directive root element. 
        // attr is a dictionary of attributes on the directive element. 
        elem.bind('click', function(e1) { 

         debugger; 

         alert(e.flowObj); 


        },e); 
        } 
     }; 


    }); 

उत्तर

7

समाधान: अपने निर्देश और सब कुछ से पूरे scope संपत्ति निकालें एक्सप के रूप में काम करना चाहिए ected।

भी : की तरह कुछ करने के लिए

elem.bind('click', function(scope) { 

:

elem.bind('click', function(e) { 

क्योंकि आप अपने घटना में scope के लिए उपयोग अधिलेखित कर रहे हैं आप इस लाइन से scope तर्क का नाम बदलने की आवश्यकता होगी एक ही नाम का उपयोग करके हैंडलर।

व्याख्या:

ng-repeat निर्देश अपने क्लोन से प्रत्येक का कारण बनता है अपने स्वयं के नए गुंजाइश है। डिफ़ॉल्ट रूप से तत्व साझा करने के दायरे पर निर्देश, ng-repeat के साथ रखे गए किसी भी अन्य निर्देश के दायरे को साझा करते हैं और वर्तमान पुनरावृत्ति के $scope चरों तक पहुंच प्राप्त करते हैं। दूसरे शब्दों में, आपका कस्टम निर्देश पहले से ही ng-repeat के साथ दायरा साझा करता है और डिफ़ॉल्ट रूप से flowObj तक पहुंच प्राप्त करता है।

कारण जब आपके कस्टम के निर्देश पर एक scope संपत्ति निर्दिष्ट करने से काम नहीं किया है कि इस का अपना अलग गुंजाइश जो ng-repeat के साथ साझा नहीं किया था और इसलिए आप क्लोन पर चर के लिए उपयोग नहीं किया है करने के लिए निर्देश के कारण होता है 'scopes।