我有以下指令:指令點擊獲取調用兩次
mod.directive('mdCheckbox', function(){
var link = function(scope, element, attr, ngModel){
var inp = element.find('input');
scope.$watch(function(){
return ngModel.$viewValue;
}, function(newVal){
console.log('newVal: ' + newVal);
if(newVal){
inp.attr('checked', 'checked');
}else{
inp.removeAttr('checked');
}
});
scope.clickT = function(evt){
// ** why the need for stopPropagation ?
evt.stopPropagation();
console.log('click called');
if(inp.is(':checked')){
ngModel.$setViewValue(false);
console.log('set to false');
}else{
ngModel.$setViewValue(true);
console.log('set to true');
}
};
};
var directive = {
restrict: 'EA',
require: 'ngModel',
scope: {
text: '@mdText'
},
template: '<div ng-click="clickT($event)" class="checkbox"><input type="checkbox"/>' +
'<span>{{text}}</span></div>',
replace: true,
link: link
};
return directive;
});
和HTML:
<md-checkbox md-text="Is Awesome" ng-model="user.isAwesome"></md-checkbox>
現在clickT處理程序被調用兩次,我必須阻止它的傳播。但是我不清楚爲什麼會發生這種情況。第二個問題是,即使這看起來像是有效的,但在幾次點擊之後,它停止工作 - 該值不再改變真/假。
Here's一個plunkr測試
感謝。
恐怕你錯了'checked'不是一個屬性,請參閱:https://developer.mozilla.org/pt-BR/docs/Web/HTML/Element/Input –
得到我upvote,因爲我還沒有找到另一種方法來調用輸入#$ render()方法,而無需直接寫入模型。 –
@Werlang我的意思是在jQuery上下文中,閱讀jQuery文檔中的「Attributes vs. Properties」:https://api.jquery.com/prop/ –