$ watch在Angular Modal中没有工作

nom*_*mad 4 javascript twitter-bootstrap angularjs angular-ui angular-ui-bootstrap

想把一只$ watch放在AngularJS Modal里面的一个单选按钮上.但是,对于任何值更改,$ watch在模态内部都不起作用.

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

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

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

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

有没有人有解决这个问题的方法?谢谢

Gre*_*egL 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);
  }); 
Run Code Online (Sandbox Code Playgroud)

您的HTML中的单选按钮应为:

        <input type="radio" ng-model="data.rdd" value="me">me
        <input type="radio" ng-model="data.rdd" value="you">you
Run Code Online (Sandbox Code Playgroud)

把你的Plunkr分叉,所以它现在可以工作了.