2016-03-09 85 views
0

我想在我的代碼中使用$ emit發出指令。

(function() { 
    angular 
     .module('myApp') 
     .directive('testDirective', testDirective); 

    function testDirective() { 
     var directive = { 
      link: link, 
      restrict: 'A', 
      controller: testCtrl, 
      controllerAs: 'vm' 
     }; 

     return directive; 

     function link(scope, element, attrs) { 

     } 
    } 

    function testCtrl() { 
     var vm = this; 

     // do something 
     vm.$emit('someEvent', {'id': '123'}) 
    } 
})(); 

但是,我得到 'TypeError: vm.$emit is not a function'。我不知道如何解決這個問題。誰能幫忙?非常感謝!

回答

4

controllerAs只是意味着範圍變量直接附加到控制器上 - 並不意味着控制器本身就是一個角度範圍的實例。在這種情況下,你需要的範圍注入到控制器,然後從範圍發出事件:

function testCtrl($scope) { 
    // do something 
    $scope.$emit('someEvent', {'id': '123'}) 
} 

另外注意,正常的注射規則 - 如果你打算來縮小這個,你可能需要這樣的東西:

testCtrl['$inject'] = ['$scope']; 
相關問題