Estou tentando injetar um serviço em uma diretiva como abaixo:
var app = angular.module('app',[]);
app.factory('myData', function(){
return {
name : "myName"
}
});
app.directive('changeIt',function($compile, myData){
return {
restrict: 'C',
link: function (scope, element, attrs) {
scope.name = myData.name;
}
}
});
Mas isso está me devolvendo um erro Unknown provider: myDataProvider
. Alguém poderia procurar no código e me dizer se estou fazendo algo errado?
Altere sua definição de diretiva de
app.module
paraapp.directive
. Além disso, tudo parece bem.Aliás, muito raramente você precisa injetar um serviço em uma diretiva. Se você estiver injetando um serviço (que geralmente é uma fonte ou modelo de dados) em sua diretiva (que faz parte de uma visualização), estará criando um acoplamento direto entre sua visualização e modelo. Você precisa separá-los conectando-os usando um controlador.Funciona bem. Não sei ao certo o que você está fazendo, o que está errado. Aqui está uma parte dele funcionando.
http://plnkr.co/edit/M8omDEjvPvBtrBHM84Am
fonte
function($location) { ...
mas na verdade não fizer referência a ela$location
, o AngularJS não executará a injeção. A única vez em que você perceberia esse comportamento seria no depurador.Você também pode usar o serviço $ injetar para obter o serviço que desejar. Acho isso útil se não souber o nome do serviço antes, mas conhecer a interface do serviço. Por exemplo, uma diretiva que irá conectar uma tabela a um ponto final ngResource ou a um botão de exclusão / registro genérico que interaja com qualquer ponto final api. Você não deseja reimplementar a diretiva de tabela para cada controlador ou fonte de dados.
template.html
my-directive.directive.coffee
agora o seu serviço 'anônimo' está totalmente disponível. Se for ngResource, por exemplo, você poderá usar a interface ngResource padrão para obter seus dados
Por exemplo:
Eu descobri que essa técnica é muito útil ao criar elementos que interagem especialmente com os pontos de extremidade da API.
fonte