我有一个对象暴露在method([value])
形式通过getter/setter方法2种属性(比如foo
和bar
),这样你就可以通过调用method()
得到他们的价值,你可以通过调用method(value)
设定自己的价值。如何在此getter/setter方案上实现ng-model绑定?
而且,该对象保持foo
和bar
同步,使bar
总是比foo
大1。这意味着无论您何时设置foo
的值,它都会在内部更新bar
的值,反之亦然。
这是示例实现:
function obj() {
var foo = 1;
var bar = 2;
return {
foo: function (value) {
if (value) {
foo = value;
bar = foo + 1;
}
return foo;
},
bar: function (value) {
if (value) {
bar = value;
foo = bar - 1;
}
return bar;
}
}
}
现在我有两个input
元件,一个用于每个属性。
// in my controller
$scope.myobj = obj();
<!-- in the HTML -->
<input my-directive ng-model="myobj.foo">
<input my-directive ng-model="myobj.bar">
请记住,foo
和bar
是函数,所以我写了$formatter
通过调用吸气来获取值;和$parser
通过调用setter方法,这样设置的值:
.directive('myDirective', function() {
return {
require: 'ngModel',
link: function ($scope, $element, $attrs, ngModel) {
ngModel.$formatters.push(function (modelValue) {
return modelValue();
});
ngModel.$parsers.push(function (viewValue) {
ngModel.$modelValue(viewValue);
return ngModel.$modelValue;
});
}
};
});
正如你所看到的,格式化/分析器事情的作品就好了,但问题是,物业的<input>
值是内部修改(比如bar
如果你改变foo
)不更新。
我甚至无法理解为什么地球不起作用。正如您在示例中所看到的,在每个输入下面,我将插入相同的值,该值在任何更改后都会完美更新。 为什么ng-model没有更新我的<input>
值?
'$ formatters'在模型值发生变化时运行“。我的猜测是'$ modelValue'永远不会改变 - 它仍然是对'foo()'或'bar()'的静态常量引用。你*调用函数来改变一些数据的内部表示,但ngModel所附带的东西永远不会改变。 DOM更新是因为对'foo()'和'bar()'的绑定 - 这些函数调用的*结果*会更新。 –
感谢布兰登的信息! – luisfarzati