Estoy tratando de inyectar un servicio en una directiva como la siguiente:
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;
}
}
});
Pero esto me devuelve un error Unknown provider: myDataProvider
. ¿Podría alguien mirar el código y decirme si estoy haciendo algo mal?
Cambie su definición de directiva de
app.module
aapp.directive
. Aparte de eso, todo se ve bien.Por cierto, muy raramente tienes que inyectar un servicio en una directiva. Si está inyectando un servicio (que generalmente es una fuente de datos o modelo) en su directiva (que es parte de una vista), está creando un acoplamiento directo entre su vista y modelo. Debe separarlos conectándolos entre sí mediante un controlador.Funciona bien No estoy seguro de lo que estás haciendo, lo cual está mal. Aquí hay una parte de esto funcionando.
http://plnkr.co/edit/M8omDEjvPvBtrBHM84Am
fuente
function($location) { ...
pero en realidad no se refiere al$location
interior de la función, AngularJS no realizará la inyección. La única vez que notará este comportamiento es dentro del depurador.También puede usar el servicio $ inject para obtener el servicio que desee. Me resulta útil si no conozco el nombre del servicio con anticipación pero conozco la interfaz del servicio. Por ejemplo, una directiva que conectará una tabla en un punto final ngResource o un botón genérico de borrar registro que interactúa con cualquier punto final de la API. No desea volver a implementar la directiva de tabla para cada controlador o fuente de datos.
template.html
my-directive.directive.coffee
ahora su servicio 'anónimo' está completamente disponible. Si es ngResource, por ejemplo, puede usar la interfaz estándar ngResource para obtener sus datos
Por ejemplo:
He encontrado que esta técnica es muy útil al hacer elementos que interactúan especialmente con puntos finales API.
fuente