Angularjs 如何在指令上模拟内联控制器?

Angularjs 如何在指令上模拟内联控制器?,angularjs,jasmine,Angularjs,Jasmine,测试时,您可以使用$controllerProvider.register('MyCtrl')模拟已向angular.module(…).controller('MyCtrl')注册的控制器 但是我如何在指令上模拟内联控制器呢 function MyCtrl() { } function MyDir() { return { restrict: 'E', controllerAs: 'myCtrl', controller: MyCtr

测试时,您可以使用
$controllerProvider.register('MyCtrl')
模拟已向
angular.module(…).controller('MyCtrl')注册的控制器

但是我如何在指令上模拟内联控制器呢

function MyCtrl() {

}

function MyDir() {
    return {
        restrict: 'E',
        controllerAs: 'myCtrl',
        controller: MyCtrl,
        template: '<div>hi</div>',
    };
}
函数MyCtrl(){
}
函数MyDir(){
返回{
限制:'E',
controllerAs:'myCtrl',
控制器:MyCtrl,
模板:“嗨”,
};
}

如果没有真正的黑客行为,这是不可能的。相反,将控制器声明为普通控制器,并按名称从指令中引用它

angular.module(...).controller('MyCtrl')
指令:

return {
    // ...
    controller: 'MyCtrl',
    // ...
};

这也允许您像其他任何控制器一样测试控制器。

这已经很晚了,但实际上可以:

angular
.module('myModule')
.directive('myDir',function(){
返回{
限制:“A”,
bindToController:对,
controllerAs:“$ctrl”,
控制器:MyDirController,
作用域:{}
};
});
函数MyDirController(…){…}
...
让myDir=$injector.get('myDirDirective')//返回一个注册数组
让$controller=$injector.get(“$controller”);
//因为我们只需要一次注册,所以可以使用第一个元素
设$ctrl=$controller(myDir[0].controller,{/*locals*/},{/*bindings*/})