Я пытаюсь внедрить службу в директиву, как показано ниже:
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;
}
}
});
Но это возвращает мне ошибку Unknown provider: myDataProvider
. Может кто-нибудь, пожалуйста, посмотрите код и скажите мне, если я делаю что-то не так?
Измените определение вашей директивы с
app.module
наapp.directive
. Кроме того, все выглядит хорошо.Кстати, очень редко вам приходится вводить услугу в директиву. Если вы внедряете сервис (который обычно является источником данных или моделью) в вашу директиву (которая является частью представления), вы создаете прямую связь между вашим представлением и моделью. Вы должны отделить их, соединяя их вместе с помощью контроллера.Это работает нормально. Я не уверен, что вы делаете, что неправильно. Вот его работа.
http://plnkr.co/edit/M8omDEjvPvBtrBHM84Am
источник
function($location) { ...
но на самом деле не ссылаетесь$location
внутри функции, AngularJS не будет выполнять внедрение. Единственный раз, когда вы заметите такое поведение, находится внутри отладчика.Вы также можете использовать сервис $ inject, чтобы получить любой сервис, который вам нравится. Я считаю это полезным, если я не знаю название службы заранее, но знаю интерфейс службы. Например, директива, которая вставит таблицу в конечную точку ngResource, или общая кнопка удаления записи, которая взаимодействует с любой конечной точкой API. Вы не хотите повторно реализовывать директиву table для каждого контроллера или источника данных.
template.html
my-directive.directive.coffee
Теперь ваша анонимная услуга полностью доступна. Если это, например, ngResource, вы можете использовать стандартный интерфейс ngResource для получения ваших данных.
Например:
Я нашел эту технику очень полезной при создании элементов, особенно взаимодействующих с конечными точками API.
источник