当我有一个具有多个级别的ngModel并且我在作用域中以编程方式修改该值时,该值不会在UI中更新。如果我把$ watch放在同一个房产上,它就可以了。我该如何修复ngModel
HTML:
<form ng-controller="testController">
<input type="text" ng-model="coco.c.c.c">
<input type="test" ng-model="super.s.s.s">
<input type="test" ng-model="super2">
</form>
JS:
var app = angular.module('app', []);
app.controller('testController', function ($scope) {
$scope.super = {
s: {
s: {
}
}
};
$scope.coco = {
c: {
c: {
}
}
};
$scope.$watch('coco.c.c.c', function (value) {
$scope.super = +value * 2;
console.log(value);
});
$scope.$watch('super.s.s.s', function (value) {
$scope.super2 = +value * 2;
});
});
app.controller('testController2', function ($scope) {
$scope.$watch('coco', function (value) {
$scope.super = +value * 2;
console.log(value);
});
$scope.$watch('super', function (value) {
$scope.super2 = +value * 2;
});
});
angular.bootstrap(document,[app.name]);
答案 0 :(得分:1)
我认为问题在于这一行
$scope.super = +value * 2;
这里你要改变$ scope.super是什么。所以你不能再使用$ scope.super.s.s.s
了 但是,我还没有理解你想要完成的是什么。也许是这样的?<form ng-controller="testController">
<input type="text" ng-model="coco.c.c.c" />
<input type="text" ng-model="super.s.s.s" />
<input type="text" ng-model="super2" />
</form>
app.controller('testController', function ($scope) {
$scope.super = {s:{ s:{ }}}
$scope.coco = {
c: {
c: {
}
}
};
$scope.$watch('coco.c.c.c', function (value) {
$scope.super.s.s.s = +value * 2;
console.log("coco", value);
});
$scope.$watch('super.s.s.s', function (value) {
$scope.super2 = +value * 2;
console.log("super", value);
});
});
答案 1 :(得分:0)
继续上一个答案。在线
$scope.super = +value * 2;
你正在为一个创建一个nan值的数字添加一个对象,破坏你的模型参考因此没有模型,因为对象是附带的并且通过引用观察这意味着你的输入没有可以观察的模型因此你正在制动你的链
http://jsfiddle.net/d65yan/M5wzt/4/
然后你试图在控制器中监听其他控制器范围的变化?这不会起作用抱歉,你只能观察范围内发生的事情