所以我有一个单选按钮列表,我试图用指令中的$ watch来观察选择的变化。我只能在第一次选择这些元素时触发手表。
我的HTML:
return {
restrict: "A",
scope: {
selectedKey: '='
},
link: function(scope, elem, attrs) {
scope.$watch('selectedKey', function(newValue, oldValue, scope) {
alert('triggered')
});
}
}
我的指令回归:
{{1}}
我做错了什么?我尝试用"值"只是但是手表不会被触发。
提前谢谢
答案 0 :(得分:0)
您需要了解ngRepeat
为每个迭代项创建一个新范围。这意味着value
对于每个单选按钮都是个体的。结果,每个无线电输入只触发一次监视表达式,之后它永远不会改变。
您需要做的是使用包含所选无线电值的父范围模型。您可以通过在控制器中声明模型来实现此目的,例如:
$scope.radio = {value: null};
并将此模型用于每个单选按钮。此外,我删除了多余的selected-key
属性,您不需要它,因为您已经有一个指向同一radio.value
的ng-model。
指令的全部内容如下:
app.directive('isValid', function() {
return {
restrict: "A",
scope: {
selectedKey: '=ngModel'
},
link: function(scope, elem, attrs) {
scope.$watch('selectedKey', function(newValue, oldValue, scope) {
console.log('triggered')
});
}
};
});