覆盖指令中注入的服务

时间:2015-01-19 15:13:17

标签: angularjs angularjs-directive

更确切地说,我并不是想在测试环境中这样做。

使用$controller服务,可以实现控制器,为其提供自定义注入服务,例如:

var controllerImpl = ['$stateParams', function($stateParams) {
    console.log($stateParams)
}];

$controller(controllerImpl, {
    $stateParams: {foo: 'bar'}
})

在这种情况下,controllerImpl会将$ stateParams视为{foo: 'bar'} $stateParams服务。

我想使用$compile服务(可能)使用指令执行相同操作,但我找不到任何方法将本地服务器传递给该服务。

1 个答案:

答案 0 :(得分:0)

您可以直接使用$injector来实例化对象,但我不能100%确定您打算如何使用它。

invokeinstantiate都允许您通过提供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 
  }
);

理论上你可以用这种技术创建一个新的指令实例,然后用一个元素和一个新的范围手动调用它的链接函数,但这似乎是一个坏主意。