Javascript 即使绑定到更深的对象或数组,也要使ngModel fire$渲染
绑定到ngModel时,如果您有对象: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]" /> &
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>