4

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

如果我尝试将单选按钮放在模态之外,那么$ watch完美无缺。

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

在上面plunkr,如果你点击打开我的选择上2个单选按钮(我,你)$手表不会激发,进而ü不能看到值警报。

但是,如果您在主页面点击单选按钮(即外窗)$腕表作品完美的罚款,并引发警报消息。

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

回答

10

这是违反了非官方的金科玉律的症状使用ng-model时:“”

始终有一个在NG-模型表达

如果你没有在你的NG-模型表达一个点,它会在那里与NG-模型的元素是点上创建当前范围的属性。这通常不会成为您期望的范围,因为许多指令都会创建子范围,包括UI Bootstrap中的模态指令。

通过包含一个点,引用一个将在原型(范围)链上查找的对象,然后访问或创建上的属性,该属性将在正确的范围内。

因此,在你的例子,如果你让你在你的控制器创建一个$scope.data属性,并设置ng-model表达data.rdd改变你的代码,你将能够“看到”在控制器的变化并做出反应他们。

因此,控制器代码的函数体的开头为:在您的HTML

$scope.data = { 
    rdd: 'me' 
    }; 

    $scope.$watch('data.rdd', function(v, old){ 
    if(v!==undefined && v !== old) 
     alert(v); 
    }); 

而且你的单选按钮应该是:

 <input type="radio" ng-model="data.rdd" value="me">me 
     <input type="radio" ng-model="data.rdd" value="you">you 

forked your Plunkr所以现在的作品。

+0

非常感谢!工作就像一个魅力:) – nomad

+0

我越使用其他框架(reactJS,flightJS,烬)越讨厌Angular。这会让你的工作效率非常高,直到你找到像这样的东西...... – aemonge

+0

那么如何让父文档与数据更改同步呢?当你在模式中切换收音机时,我希望能看到父母的改变。 – MrWiLofDoom