कोणीय कोड placed on jsfiddle में $ संकलन ($ तत्व) ($ गुंजाइश) बुला $compile($element)($scope)
उपयोग करता है और कार्रवाई एनजी क्लिक होने की दो बार का कारण बनता है कि एक कस्टम निर्देश, के बारे में है का उद्देश्य क्या है: मेरे सवाल कर रहे हैं :एक निर्देश
- मैं समझना चाहता हूं, एनजी-क्लिक कार्रवाई क्यों हो रही है?
$compile($element)($scope)
पर कॉल करने का उद्देश्य क्या है?- यदि यह नहीं कहा जाता है तो क्या होता है, को किस परिस्थिति में कहा जाना चाहिए?
यहाँ विवरण हैं और मैं अब तक क्या इकट्ठे हुए हैं:
मैं समझता हूँ चाहते हैं, क्यों एनजी क्लिक कार्रवाई दो बार हो रहा है? निम्न पंक्ति कस्टम निर्देश "हैलो" और एक बटन पर एनजी-क्लिक दिखाती है। कस्टम निर्देश $compile($element)($scope)
पर कॉल करता है और यही वह रेखा है जो कार्रवाई को दो बार निकाल दिया जाता है, लेकिन मुझे समझ में नहीं आता कि कैसे?
टेस्ट क्लिक करें! http://jsfiddle.net/4x4L3gtw/27/
<div ng-app='myApp' ng-controller='DirectiveTestController'>
<button hello ng-click="testClick()">Test CLICK!</button>
</div>
var myApp = angular.module('myApp', []);
myApp.controller('DirectiveTestController', ['$scope',
function ($scope) {
$scope.testClick = function() {
window.alert("hey");
console.log("hey");
}
}]);
myApp.directive('hello', function() {
return {
scope: true,
controller: ['$scope', '$element', '$compile', function ($scope, $element, $compile) {
$element.removeAttr('hello');
// $element.removeAttr('ng-click');
$compile($element)($scope);
}]
};
});
$compile($element)($scope)
बुला का उद्देश्य क्या है, क्या करता है, तो यह नहीं कहा जाता है और होता है किस परिस्थिति में यह कहा जाना चाहिए -
यहाँ कोड है?
(बटन पर क्लिक करें और आप देखेंगे कि कार्रवाई में दो बार होता है)
निर्देश के इरादे को छिपाने/कुछ तर्क के आधार पर निष्क्रिय करने के लिए है। इसलिए इस निर्देश में मैं $element.removeAttr("ng-hide")
इत्यादि देखता हूं, और प्रत्येक बार $element.removeAttr
कहा जाता है कि इसे $compile($element)($scope)
के साथ किया जाता है, क्या डीओएम को फिर से लिखने का उद्देश्य है?
मैंने डीओएम की जांच की और मुझे कई बार परिभाषित एनजी-क्लिक नहीं दिखाई देता है। डीओएम (फायरबग) की जांच करते समय, मैंने $ element-> 0-> विशेषताओं-> एनजी-क्लिक (अन्य तत्वों के बीच) को देखा।
यदि मैं $element.removeAttr("ng-click")
का उपयोग करके एनजी-क्लिक हटा देता हूं तो कार्रवाई केवल एक बार होती है। या यदि मैं $compile($element)($scope)
हटा देता हूं तो कार्रवाई केवल एक बार होती है।
रोडिओन धन्यवाद, आप स्पष्टीकरण दें कि नियंत्रक के बीच मतभेद की नियंत्रक – liontale
अच्छा स्पष्टीकरण के बजाय लिंक विधि और आप अन्य प्रश्न में पा सकते हैं लिंक करें सकता है: http://stackoverflow.com/प्रश्न/15676614/निर्देश-लिंक-बनाम-संकलन-बनाम नियंत्रक। मुझे यकीन नहीं है, लेकिन मेरे दिमाग में मुख्य कारण है, आपको लिंक में डीओएम के साथ संचालन क्यों करना चाहिए क्योंकि लिंक एचटीएमएल संकलन के बाद आमंत्रित करता है। – Rodion