如何始终使用'set-method'来更改用作ng-model的对象的属性

时间:2014-07-14 13:53:11

标签: angularjs angularjs-scope

我在控制器中的

$scope.foo = new Foo('test'); // foo.property now 'test'

在我的视图中

<input type="text" ng-model="foo.property" />

但我真的不希望直接更改foo.property。 我希望通过为它调用'set method'来改变它,比如

foo.setProperty('new-value');

所以我知道我可以用手表这样做:

$scope.$watch('myObject.property', function(newValue,oldValue) { 
    myObject.setProperty(newValue);
}

但是我会再次遇到这种情况,所以我的问题是我是否可以为每个Foo更自动地做这件事?

或:如何在Angular中最好地实现某些内容,以便每次使用someFoo.property作为ng-model时,都会通过调用someFoo.setProperty(newValue)来更改?

2 个答案:

答案 0 :(得分:1)

您可以在模糊事件上调用setter方法:

<input type  type="text" ng-model="data.property" ng-blur="foo.setProperty(data.property)">

或使用ng-change =&#34; foo.setProperty(data.property)&#34;

答案 1 :(得分:0)

你基本上希望foo.property模型不会因用户交互而改变,是吗?为什么不使用HTML disable输入框,这将确保没有用户交互改变输入值,然后使用$ watch? $ watch是处理您需要的完美方式。只要它不是deep watch,就没有性能问题。