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() { /* */ }
我能解决这个问题吗,还是 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() { /* */ }