angularjs:指令的访问控制器

angularjs: access controller of directive

本文关键字:访问控制 控制器 访问 指令 angularjs      更新时间:2023-09-26

我正在单元测试我的一个指令。它的基本结构类似于

angular.module('MyApp')
.directive('barFoo', function () {
    return {
        restrict: 'E',
        scope: {},
        controller: function ($scope, $element) { 
              this.checkSomething = function() { .... }
        },
        link: function(scope, element) { .... }
    }
});

在我的单元测试中,我想测试"checkSomething"功能,所以我尝试了

var element = $compile('<barFoo></barFoo>')(scope);
var controller = element.controller()
...

然而,控制器是未定义的。是否可以访问指令的控制器?

胶水是您的范围,因此您可以进行

controller: function ($scope, $element) { 
  this.checkSomething = function() { .... }
  $scope.controller = this;                
},

但我认为最好的做法是将每个功能都附加到这样的范围中

controller: function ($scope, $element) { 
  $scope.checkSomething = function() { .... }
},

然后是

var element = $compile('<barFoo></barFoo>')(scope);
var checksomthingResult = scope.checkSomething ()