我有一个对象通过 getter/setter 以 的形式公开 2 个属性(比如foo
和) ,因此您可以通过调用来获取它们的值,并且可以通过调用来设置它们的值。bar
method([value])
method()
method(value)
此外,该对象保持foo
并bar
同步,其方式bar
始终为 1 大于foo
)。这意味着每当您设置 的值时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
andbar
是函数,所以我写了一个$formatter
通过调用 getter 来获取值;和 a$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>
价值?