$ watch在Angular Modal中没有工作

时间:2014-03-26 06:49:22

标签: javascript angularjs twitter-bootstrap angular-ui angular-ui-bootstrap

我正试图在AngularJS Modal内的单选按钮上放一个$ watch。但是,对于任何值更改,$ watch在模态内部都不起作用。

如果我尝试将单选按钮放在模态外,$ watch的效果非常好。

http://plnkr.co/edit/q8t9qGJg57MMiQGop202?p=preview

在上面的plunkr中,如果你点击打开我并选择上面2个单选按钮(我,你),$ watch不会被触发,反过来你就看不到带有值的警报。

但是,如果您单击主页面中的单选按钮(即外部窗口),$ watch可以正常工作并抛出警告信息。

是否有人针对此问题采取了解决方法?感谢

1 个答案:

答案 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所以现在可以了。