2015-05-20 5 views
0

Я пытаюсь создать угловую директиву для вызова метода службы для проверки изменения базы данных.Директива AngularJS, Услуга вызова по атрибуту директивы

Вот мой HTML:

<div my-directive="Panel.check"></div> 

Что я хочу:

вызов "проверить" метод обслуживания "Панель". Директива ничего не знает об услугах и методе. Он просто разбирает атрибуты и связывает их, или, если необходимо, покажите мне решение.

Что у меня есть:

appDirectives.directive('myDirective', function($parse) { 

var directiveOnObject = { 
    restrict: 'A', 
    scope: { method:'&myDirective' }, 
    link: function(scope,element,attrs) { 

     var panel = scope.method; 

     console.log(panel()); 
    } 
}; 

return directiveOnObject; 

}); 

метод Scope должен получить экземпляр "Панель" и называет "проверить" метод его.

Есть ли какие-либо решения? Пожалуйста, объясни.

ответ

2

Вы должны иметь доступ к Panel службы в контроллере, например:

angular.module('app').controller('Foo', function($scope, Panel) { 
    $scope.Panel = Panel; 
}); 

Теперь вам может использовать вашу директиву, но вы, когда вы передаете функцию с &, вам также необходимо поставить на охрану:

<div my-directive="Panel.check()"></div> 

Без этого он не будет работать. Остальная часть кода остается прежней.

Проверить это here

EDIT: Если вы просто нужна ваша директива, чтобы использовать только один конкретный сервис или один точный метод, вводят услугу в директиве, как вы делали с $parse (который не нужен в любом случае по путь).

EDIT 2: Если услуга вы хотите позвонить принимает параметр, вам нужно сделать что-то вроде:

<div my-directive="Panel.check(param1, param2)"></div> 

Далее в директиве, необходимо сопоставить эти параметры для ваших локальных объектов, так что если для пример (внутри вашей директивы) у вас есть:

link: function(scope, element, attrs) { 
    var foo = 1; 
    var bar = 2; 
} 

И вы хотите передать эти переменные в качестве параметров.

Во-первых, вам нужно вспомнить, как вы назвали эти параметры в HTML, в бетоне они были param1 и param2 так что вам нужно сделать (внутри функции связи):

scope.method({param1: foo, param2: bar}); 

Так param1 мы переходим foo и для param2 мы проходим bar.

+0

Это именно то, что я хочу! Спасибо. Но как насчет параметров отправки? Как мы можем отправить параметры на завод из директивы таким образом? – saeedhbi

+0

Я отредактировал свой ответ. –

0

Прежде всего, вам нужно будет вводить услугу в директиве:

appDirectives.directive('myDirective', ['$parse', 'myService', function($compile, myService){ 
// here use 'myservice' to get access to variables and methods of the service 
}]); 
Смежные вопросы