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

AngularJS pass function to ng-repeat from object

我能解决这个问题吗,还是 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() 输入更改。你知道解决这个问题的方法吗?

谢谢!

你很接近是的......你就是这样工作的:

<input ng-model="car.myModel" ng-change="car.myFunction(car.myModel)"/>

首先,不要使用 function,因为它是一个 JS 关键字。假设您将该字段重命名为 functionToCall...

其次,不能使用插值,必须调用函数:

<input ng-change="car.functionToCall()"/>

如果您不希望某些汽车发生任何事情,则不要将函数初始化为使用字符串调用,而是使用不执行任何操作的函数对其进行初始化:

{color: 'red', type: 'Ferrari', functionToCall: angular.noop}

关于您的代码段,我注意到的第一件事是您使用保留关键字 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() { /* */ }