更准确地说,我并不是要在测试环境中这样做。
使用$controller服务可以对控制器进行初始化,为其提供自定义注入服务,例如:
var controllerImpl = ['$stateParams', function($stateParams) {
console.log($stateParams)
}];
$controller(controllerImpl, {
$stateParams: {foo: 'bar'}
})在这种情况下,controllerImpl会将$stateParams读取为{foo: 'bar'} $stateParams服务。
我想用一个指令做同样的事情,使用$compile服务(也许),但我没有找到任何方法来将本地变量传递给那个服务。
发布于 2015-01-19 23:56:29
您可以直接使用$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
}
);从理论上讲,你可以使用这种技术创建一个新的指令实例,然后手动调用它的链接函数与一个元素和一个新的作用域,但这似乎不是一个好主意。
https://stackoverflow.com/questions/28027774
复制相似问题