2015-01-19 2 views
1

Чтобы быть более точным, я не пытаюсь это сделать в контексте тестирования.Переопределить службы, введенные в директивы

С $controller сервисом это возможно istantiate контроллера, обеспечивая пользовательский инъекционные услуги к нему, как:

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

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

В этом случае controllerImpl будет читать $ stateParams, как {foo: 'bar'}$stateParams службы.

Я хотел бы сделать то же самое с директивой, используя службу $compile (возможно), но я не могу найти способ передать местные жители этой службе.

+0

Пожалуйста, предоставьте ваш прецедент, так как не совсем понятно, чего вы хотите достичь. '$ controller' запускает контроллер, что бы вы не делали сами. Вы также не должны создавать директиву. – zeroflagL

ответ

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 
    } 
); 

Вы можете теоретически создать новый экземпляр директивы, с этой техникой, а затем вручную вызвать это функция связывания с элементом и новой областью, но это, кажется, как плохая идея.

Смежные вопросы