我可以解决这个问题,或者ng-repeat
是不是很糟糕?
标记:
<div ng-repeat="car in Ctrl.cars">
<span>{{::car.color}}</span>
<span>{{::car.type}}</span>
<input ng-change="{{::car.function}}"/>
</div>
js:
scope.cars = [
{color: 'red', type: 'Ferrari', function:''},
{color: 'green', type: 'Subaru', function: scope.doSomething},
];
我想在输入更改时运行doSomething()
。你知道解决这个问题吗?
谢谢!
答案 0 :(得分:2)
首先,不要使用function
,因为它是JS关键字。假设您将字段重命名为functionToCall
...
其次,你不能使用插值,你必须调用函数:
<input ng-change="car.functionToCall()"/>
如果你想要一些汽车什么都不发生,那么不要初始化函数来调用字符串,用一个什么都不做的函数初始化它:
{color: 'red', type: 'Ferrari', functionToCall: angular.noop}
答案 1 :(得分:1)
你关闭是的...这就是你的工作方式:
<input ng-model="car.myModel" ng-change="car.myFunction(car.myModel)"/>
答案 2 :(得分:1)
我注意到关于你的代码片段的第一件事是你使用保留关键字function
作为JS对象的键。如果你让JS知道它是一个字符串:{ "function": "someotherval" }
要从视图中调用函数,您可以执行以下操作:
<input ng-change="car['function']()"/>
如果Angular无法处理这种语法,我建议使用changeCallback
之类的东西作为值的关键字。这对我有用:
<input ng-change="car.changeCallback()"/>
{color: 'red', type: 'Ferrari', changeCallback: scope.doSomethingAmazing }
需要定义函数本身:
scope.doSomethingAmazing = function() { /* */ }