2017-02-24 88 views
-1

我采用了棱角分明1.2和伪指令中定义的函数:调用指令内定义的函数

.directive(
'Derp', 
function() { 
    return { 
     restrict: 'C', 
     link: function(scope, element, attrs) { 
      scope.$parent.sum = function() { 
       //something 
      } 
     }) 
} 
}) 

我打电话从我的主控制器,像这样的功能:

$scope.sum(); 

但我发现了这个错误在浏览器控制台:

TypeError: $scope.sum is not a function 

我是不是得到什么了吗?

+0

您定义的指令,而不是主控制器的范围内的功能;因此,它找不到它的原因。你有什么理由在这里定义这个功能,而不是在主控制器中说? –

+0

是的,因为我正在使用的库,所以我需要在指令内部保留函数。无论如何,我编辑了上面的代码,因为我忘记了函数定义中的“$ parent”。我的错。 – Andrew

+0

依靠范围层次结构是一种错误的模式,目前不被视为“最佳实践”。确切的解决方案取决于指令和'sum'的使用方式。 – estus

回答

0

将它绑定到您的链接函数中的作用域。

刚刚接触它像ng-click="sum()"

link : function(scope, element, attrs) { 
    // Scope Variables 
    scope.sum = sum; 

    function sum(){ 
    //something 
    } 
}