更确切地说,我并不是想在测试环境中这样做。
使用$controller
服务,可以实现控制器,为其提供自定义注入服务,例如:
var controllerImpl = ['$stateParams', function($stateParams) {
console.log($stateParams)
}];
$controller(controllerImpl, {
$stateParams: {foo: 'bar'}
})
在这种情况下,controllerImpl
会将$ stateParams视为{foo: 'bar'}
$stateParams
服务。
我想使用$compile
服务(可能)使用指令执行相同操作,但我找不到任何方法将本地服务器传递给该服务。
答案 0 :(得分:0)
您可以直接使用$injector
来实例化对象,但我不能100%确定您打算如何使用它。
invoke
和instantiate
都允许您通过提供locals
对象来覆盖服务。
function myService(dep1, dep2){ ... }
$injector.invoke(
myService,
this, //optional 'this' param
{
dep1: someCustomDependency
}
);
//instantiate assumes this is a
// constructor function
$injector.instantiate(
myService,
{
dep1: someCustomDependency
}
);
理论上你可以用这种技术创建一个新的指令实例,然后用一个元素和一个新的范围手动调用它的链接函数,但这似乎是一个坏主意。