我正试图在AngularJS Modal内的单选按钮上放一个$ watch。但是,对于任何值更改,$ watch在模态内部都不起作用。
如果我尝试将单选按钮放在模态外,$ watch的效果非常好。
http://plnkr.co/edit/q8t9qGJg57MMiQGop202?p=preview
在上面的plunkr中,如果你点击打开我并选择上面2个单选按钮(我,你),$ watch不会被触发,反过来你就看不到带有值的警报。
但是,如果您单击主页面中的单选按钮(即外部窗口),$ watch可以正常工作并抛出警告信息。
是否有人针对此问题采取了解决方法?感谢
答案 0 :(得分:10)
这是使用ng-model
时违反非官方黄金法则的症状:
总是有一个“。”在您的ng模型表达式
如果你的ng-model表达式中没有一个点,它将在当前作用域上创建一个具有ng-model元素的属性。这通常不是您期望的范围,因为许多指令创建子范围,包括UI Bootstrap的模态指令。
通过包含一个点,您将引用一个对象,该对象将在原型(范围)链上查找,然后在 上访问或创建属性,这将是正确的范围。
因此,在您的示例中,如果您更改代码以便在控制器中创建$scope.data
属性,并将ng-model
表达式设置为data.rdd
,则可以“看到”控制器中的变化并对它们做出响应。
因此控制器代码函数体以:
开头 $scope.data = {
rdd: 'me'
};
$scope.$watch('data.rdd', function(v, old){
if(v!==undefined && v !== old)
alert(v);
});
HTML中的单选按钮应为:
<input type="radio" ng-model="data.rdd" value="me">me
<input type="radio" ng-model="data.rdd" value="you">you
我forked your Plunkr所以现在可以了。