我有一个自定义的AngularJS指令,它正在渲染ng-repeat。在这个ng-repeat中,我想将一个元素传递给一个函数。调用该函数,但项目未定义。
重要提示:我让我的人接听电话。
//Inside the template
<ul class="list-group" data-ng-repeat="person in persons track by $index">
<li>
... ng-click=fn(person) ...
</li>
</ul>
这是我喜欢传递此人的功能。
//in outside controller
$scope.showPerson = function (item) {
console.log(item) // this is undefined
}
我的指示如下:
directive('custom', function () {
return {
restrict: 'E',
scope: {
persons: "=persons",
fn: "&"
},
templateUrl: "/views/templates/persons.html"
};
});
我这样称呼我的指令:
<custom persons="persons" fn="showPerson()"></custom>
为什么项目未定义的任何想法?我唯一可以想象的是计时问题,因为该指令在数组之前被激活(从其余的调用中)。
答案 0 :(得分:3)
传递给孤立范围的函数在接受参数时具有特殊性。首先,在HTML中定义参数:
<custom persons="persons" fn="showPerson(x)"></custom>
请注意参数名称:x
。现在从指令的模板中(这是特殊性):
<button ng-click="fn({x: person})" ...>
其中x
是上面定义的参数的名称。