测试时,您可以使用angular.module(...).controller('MyCtrl')
模拟已使用$controllerProvider.register('MyCtrl')
注册的控制器。
但是如何在指令上模拟内联控制器呢?
function MyCtrl() {
}
function MyDir() {
return {
restrict: 'E',
controllerAs: 'myCtrl',
controller: MyCtrl,
template: '<div>hi</div>',
};
}
答案 0 :(得分:0)
没有真正hacky的东西是不可能的。相反,将控制器声明为正常,并按名称从指令引用它。
angular.module(...).controller('MyCtrl')
指令:
return {
// ...
controller: 'MyCtrl',
// ...
};
这也允许您像任何其他控制器一样测试控制器。
答案 1 :(得分:0)
这很晚了,但实际上是可能的:
angular
.module( 'myModule' )
.directive( 'myDir', function() {
return {
restrict: 'A',
bindToController: true,
controllerAs: '$ctrl',
controller: MyDirController,
scope: {}
};
});
function MyDirController( ... ) { ... }
...
let myDir = $injector.get( 'myDirDirective' ); //Returns an array of registrations
let $controller = $injector.get( '$controller' );
//Since we expect only a single registration, we can use the first element
let $ctrl = $controller( myDir[0].controller, { /*locals*/}, {/*bindings*/});