AngularJS - 将参数从ng-repeat传递给自定义指令中的控制器

时间:2015-05-05 13:56:52

标签: angularjs angularjs-directive angularjs-ng-repeat

我有一个自定义的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>

为什么项目未定义的任何想法?我唯一可以想象的是计时问题,因为该指令在数组之前被激活(从其余的调用中)。

1 个答案:

答案 0 :(得分:3)

传递给孤立范围的函数在接受参数时具有特殊性。首先,在HTML中定义参数:

<custom persons="persons" fn="showPerson(x)"></custom>

请注意参数名称:x。现在从指令的模板中(这是特殊性):

<button ng-click="fn({x: person})" ...>

其中x是上面定义的参数的名称。