का अजीब व्यवहार आज मुझे अंगुलरजेएस में $ घड़ी का उपयोग करके कुछ वास्तव में अजीब व्यवहार का सामना करना पड़ता है।
https://jsfiddle.net/yLeLuard/
यह उदाहरण एक सेवा है जो एक state
चर का ट्रैक रखेगा शामिल हैं: मैं निम्न उदाहरण के लिए अपने कोड को सरल बनाया। निर्देशों का उपयोग डीओएम को सेवा के माध्यम से state
परिवर्तनीय को बदलने के लिए एक क्लिक ईवेंट को बाध्य करने के लिए किया जाता है।
वहाँ इस उदाहरण में दो समस्याएं हैं: (इस पर एनजी-क्लिक करें संपत्ति के साथ)
- पहले बंद करें बटन केवल ng- बिना
- दो बटन दूसरे क्लिक पर राज्य में परिवर्तन क्लिक सब
main.html
<div ng-controller="main">
State: {{ api.isOpen | json }}
<div ng-click="" open>
<button>Open - Working fine</button>
</div>
<div ng-click="" close>
<button>Close - Works, but only on second click</button>
</div>
<div open>
<button>Open - Not Working</button>
</div>
<div close>
<button>Close - Not Working</button>
</div>
</div>
पर राज्य नहीं बदल रहे हैं
main.js
var myApp = angular.module('myApp', []);
myApp.controller('main', ['$scope', 'state', function($scope, state) {
$scope.api = state;
$scope.api.isOpen = false;
$scope.$watch('api.isOpen', function() {
console.log('state has changed');
});
}]);
myApp.directive('open', ['state', function(state) {
return {
restrict: 'A',
scope: {},
replace: true,
template: '<button>Open</button>',
link: function(scope, element) {
element.on('click', function() {
state.isOpen = true;
});
}
};
}]);
myApp.directive('close', ['state', function(state) {
return {
restrict: 'A',
scope: {},
replace: true,
template: '<button>Close</button>',
link: function(scope, element) {
element.on('click', function() {
state.isOpen = false;
});
}
};
}]);
myApp.service('state', function() {
return {
isOpen: null
};
});
आप अपने निर्देशों को कैसे खोलते हैं और बंद करते हैं और इसके बजाय 'ng-click = "api.isOpen = true" 'और' ng-click = "api.isOpen = false" का उपयोग करते हैं। 'क्लिक' ईवेंट – floribon
@floribon को बाध्य करने के बजाय देशी निर्देशों का उपयोग करना बेहतर है, मेरे असली निर्देशों में बहुत अधिक कार्यक्षमता है, इसलिए मैं एनजी-क्लिक का उपयोग नहीं कर सकता। इसके अलावा, मैं वास्तव में जानना चाहता हूं कि यह ठीक से क्यों काम नहीं कर रहा है। – Pascal
मैं देखता हूं। फिर 'ng-click' को हटाएं और केवल अपना निर्देश रखें। क्या हो रहा था कि 'एनजी-क्लिक' एक स्कोप डाइजेस्ट को ट्रिगर कर रहा था, इसलिए यह काम करने वाला प्रतीत होता था लेकिन अविश्वसनीय – floribon