2013-12-16 40 views
2

我正在测试我的一个指令。其基本结构是这样的angularjs:指令的访问控制器

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() 
... 

然而,控制器是不确定的。是否可以访问该指令的控制器?

回答

1

胶水是你的范围,所以你可以做

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() 
最佳实践
+0

我想知道是否将所有东西都附加到范围上可能会影响性能。或者只有$范围属性被检查/监视绑定/ $观察? –

+1

不是全部。只有那些你有$ watch表达式或绑定的表达式。 – Oliver