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*/})代码>