2017-02-24 84 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 
    } 
}