AngularJS将函数传递给对象的ng-repeat

时间:2015-10-05 16:20:44

标签: angularjs ng-repeat

我可以解决这个问题,或者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()。你知道解决这个问题吗?

谢谢!

3 个答案:

答案 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() { /* */ }