Javascript 即使绑定到更深的对象或数组,也要使ngModel fire$渲染

Javascript 即使绑定到更深的对象或数组,也要使ngModel fire$渲染,javascript,angularjs,angularjs-directive,angularjs-scope,Javascript,Angularjs,Angularjs Directive,Angularjs Scope,绑定到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]" /> &

绑定到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仅在编辑第一个输入时触发,但在编辑其他输入时从不触发。基本上,$render不会在绑定到任何更深层次的模型上触发


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

我使用$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);

var obj={};
$scope.$watch('myInputs',function()){
//在这里做任何事。。。。
//您可以为myInputs分配变量
obj.x=myInputs.a;
},对);
这里的关键是添加最后一个参数
true
,这样它可以深入监视对象。

您的解决方案是:


安古拉斯普朗克
文件。写(“”);

这很奇怪。如何添加
$render()
方法?我想你有一个自定义指令,对吧?您能提供一个plunker的实时代码示例吗?是的,所有这些都发生在自定义指令中。这真的是讨论的一部分:现在在plunker上工作,完成后会更新OP。这就是为什么(我不知道为什么他们在watcher函数中执行它,而不是回调):出于某种原因,当我在plunker中测试它时,它实际上起作用:进一步测试…Watch帮助,这一点很明显:你能更新你的代码使用attributes.ngModel而不是'someObj'吗?这样我就可以把它标记为正确的?我认为看attributes.ngModel是行不通的。您需要在您的作用域中绑定myInput并监视它,或者监视返回myInput的函数。参见yoonchee-通常你会在控制器内观看模型。
<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);
<!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>