简体   繁体   中英

angularjs: access controller of directive

I'm unit testing one of my directives. Its basic structure is like this

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

In my unit test I want to test the function 'checkSomething', so I tried

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

However, controller is undefined. Is it possible to access the controller of the directive ?

the glue is your scope so you can do

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

but i think it would be best practice to attach every function to the scope like

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

and then its

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM