我有一個對象暴露在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