ng-click松散函数上下文

时间:2014-06-25 12:22:12

标签: javascript angularjs angularjs-directive angularjs-ng-click

我正在使用angularjs 我有一个指令,它将函数作为参数:

module.directive('someDirective', [function () {
    return {
        restrict: 'E',
        template: <button ng-click="doClick()">blabla</button>,
        scope: {
            doClick: '='
        }
    };
}]);

我正在使用这个指令:

<some-directive do-click="funcOnScope"></some-directive>

一切都很完美。
现在我的范围如下:

$scope.a = {
    data: { name: 'myname' },
    action: function() {
        alert(this.data.name);
    }
}

致电:

<some-directive do-click="a.action"></some-directive>

我希望通过“我的名字”和#39;点击按钮时。但我得到一个例外,即数据未定义。这种情况正在发生,因为&#34;这个&#34;正在引用窗口(在没有上下文的情况下对ng-click函数进行角度调用) 如何在不丢失上下文的情况下调用a.action()?

2 个答案:

答案 0 :(得分:2)

将范围定义更改为

scope: {
  doClick: '&'
}

并称之为

<some-directive do-click="a.action()"></some-directive>

here is jsfiddle

答案 1 :(得分:0)

我不知道这是 正确答案,但这就足够了。在bind属性

中对a.action执行do-click
<some-directive do-click="a.action.bind(a)"></some-directive>

这将强制该函数保持a上下文。