【问题标题】:angularjs: access controller of directiveangularjs:指令的访问控制器
【发布时间】:2014-01-03 14:44:16
【问题描述】:

我正在对我的一条指令进行单元测试。它的基本结构是这样的

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

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

【问题讨论】:

    标签: javascript unit-testing angularjs 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 ()
    

    【讨论】:

    • 我想知道将所有东西附加到示波器上是否会影响性能。还是只检查/监控绑定/$watched 的 $scope 属性?
    • 并非全部。只有那些你有 $watch 表达式或绑定它们的那些。
    猜你喜欢
    • 1970-01-01
    • 2016-03-28
    • 2015-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-30
    • 1970-01-01
    • 2014-07-09
    相关资源
    最近更新 更多