Прежде всего, я думаю, что вы не должны использовать услуги напрямую. Я думаю, что angular way больше подходит для использования сервисов внутри контроллера / компонента.
Коротким ответом будет Нет . Невозможно сделать услугу доступной без вложения. Но давайте предположим, что вам нужно использовать его напрямую, так что да, вам нужно привязать его к области действия. Как вы уже сделали здесь.
Но, если вы действительно не хотите связывать это здесь, вы не можете связать это в родительском контроллере / компоненте. По умолчанию директива наследует родительский $ scope, поэтому вы можете связать его один раз с родительским, все внутри этой родительской (контроллер или компонент) директивы saveButton также будут иметь ее.
angular.module('docsIsolateScopeDirective', [])
.controller('ParentController', ['$scope','ConfirmationModal' function($scope, ConfirmationModal) {
$scope.ConfirmationModal = ConfirmationModal;
}])
.directive('myCustomer', function() {
return {
templateUrl: '/structure/header/components/save-button/save-button.html'
};
});
Кроме того, вы можете передать определенную переменную области видимости директиве так:
scope: {
ConfirmationModal: '=ConfirmationModal'
},
И вы передаете это от родителя
save-button(confirmation-modal="$ctrl.confirmationModal")
В общем, я бы порекомендовал использовать здесь директиву component over, так как это 'statefull', и это было бы гораздо удобнее. Затем используйте Сервис внутри контроллера компонента. И используйте что-то вроде функции submit () и вызова службы внутри контроллера, и привязывайте к области видимости только этот submit.
Надеюсь, это поможет,
Приветствия.
Рекомендации: https://docs.angularjs.org/guide/directive