【问题标题】:angular directive with attributes linked to function outside the parent scope具有链接到父范围之外的功能的属性的角度指令
【发布时间】:2016-01-06 12:15:12
【问题描述】:

我有一个角度指令(仅限于一个元素),它有一个链接到函数的属性(使用“&”属性)

例如:

app.directive('myDirective', function () {
    return {
        restrict: 'E',
        scope: {
            myonclick: "&",
        },
        controller: 'myController',
        template: '<button ng-click="clicked()">Click me!</button>'
    }
}); 

我正在为属性分配一个函数,如下所示:

<my-directive myonclick="inScopeFunction()"></my-directive>

如果函数在角度控制器范围内,它可以正常工作。 但我不能将它分配给角度范围之外的函数。

plunker 有一个工作示例

谢谢

【问题讨论】:

    标签: angularjs


    【解决方案1】:

    由于 inScopeFunction() 是一个全局方法,您可以直接在指令中调用它。在指令内的元素上注册一个单击侦听器,并在侦听器回调中调用 inScopeFunction()。这是更新的plunk

    link: function postLink (scope, element, attrs) {
          element.on('click', function () {
            window[attrs.myonclick]()
          });
        }
    

    html:

    <my-directive myonclick="outScopeFunction"></my-directive>
    

    【讨论】:

    【解决方案2】:

    您的控制器将有权访问全局对象,因此您可以从那里访问它

      $scope.inScopeFunction = outScopeFunction
    

    要从指令控制器访问它,您可以传入一个字符串并从那里调用全局对象

    <my-directive myonclick="'outScopeFunction'"></my-directive>
    ...
    app.controller('myController', function($scope) {
      $scope.clicked = function(){
        window[$scope.myonclick()]()
        }
    });
    

    【讨论】:

    • 确实如此,但我需要指令来直接调用该函数。感谢任何方式
    猜你喜欢
    • 2016-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多