2

当绑定到 ngModel 时,如果你有一个对象:

scope.someObj = { 
    prop: 10, 
    prop2: [20, 30], 
    subObj: {
        prop: 40
    } 
}

并将其附加到一些输入字段,如下所示:

<input type="number" ng-model="someObj.prop" />
<input type="number" ng-model="someObj.prop2[0]" />
<input type="number" ng-model="someObj.prop2[1]" />
<input type="number" ng-model="someObj.subObj.prop" />

并将一个事件侦听器放在每个的 $render 触发器上,如下所示:

ngModel.$render = function() {console.log("Hello");};

$render 只会在第一个输入被编辑时触发,但不会在其他输入被编辑时触发。基本上,$render 不会在绑定到比一层更深的模型上触发。

有没有办法强迫它这样做?

4

2 回答 2

2

我使用 $scope.$watch 来监控它。

<input ng-model="myInputs.a">
<input ng-model="myInputs.b">

var obj = {};

$scope.$watch('myInputs', function(){
   // do whatever here ....
   // you can assign variables to myInputs
   obj.x = myInputs.a;

   }, true);

这里的关键是添加最后一个参数true,以便深入监控您的对象。

于 2013-07-02T15:00:59.880 回答
0

您的解决方案是这样的:

<!DOCTYPE html>
<html ng-app="plunker">

  <head>
    <meta charset="utf-8" />
    <title>AngularJS Plunker</title>
    <script>document.write('<base href="' + document.location + '" />');</script>
    <link rel="stylesheet" href="style.css" />
    <script data-require="angular.js@1.0.x" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.min.js" data-semver="1.0.7"></script>
    <script src="app.js"></script>
  </head>

  <body ng-controller="MainCtrl">
    <input type="number" ng-model="someObj.prop" />
    <input type="number" ng-model="someObj.prop2[0]" />
    <input type="number" ng-model="someObj.prop2[1]" />
    <input type="number" ng-model="someObj.subObj.prop" />
  </body>

</html>
于 2013-07-03T09:57:32.377 回答