2016-05-14 2 views
3

У меня есть служба, которую я использую, чтобы проверить, разрешено ли моим пользователям видеть содержимое в моем приложении.Угловая услуга, доступная из любой точки мира

я использовать его как это:

<tab ng-controller="LibraryRTLController" ng-if="authFactory.hasFeature('ReadyToLearn')"> 

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

Так что мой вопрос: есть ли что-то, что я могу использовать глобальную службу?

Обратите внимание, что по причинам, которые я не могу объяснить здесь, я должен использовать ng-if, поэтому директива атрибута не поможет мне!

Update

Так ив добавил его к моей функции запуска:

angular.module('app') 
.run(function ($rootScope, AuthService, authFactory, $state) { 
    $rootScope.authFactory = authFactory; 
    $rootScope.$on('$stateChangeStart', function (event, next, toParams) { 
     $state.newState = next; 
     var authorizedRoles = next.data.authorizedRoles; 
     if (!AuthService.isAuthorized(authorizedRoles)) { 
      event.preventDefault(); 
      if (AuthService.isAuthenticated()) { 
       // user is not allowed 
      } else { 
       // user is not logged in 
       window.location.href = "http://" + window.location.hostname 
      } 
     } 
    }); 
}) 

При отладке я могу видеть, что это на самом деле установка переменной правильно.

в моей Айв службы создал функцию, которая просто просто предупреждает:

function doesWork() 
{ 
    alert('true!'); 
} 

Теперь назад в моем HTML я есть:

<tab ng-controller="LibraryRTLController" ng-init="authFactory.doesWork()"> 

Однако без каких-либо результатов?

+0

Вы можете крит пользовательские директивы, которые привнесли свой сервис аутентификации и просто удалить элемент, если пользователь не имеет права видеть текущий элемент –

+0

@ ArturGórski Да, однако, мне нужно использовать ng-if –

ответ

2

Есть ли способ, которым я могу воспользоваться услугой по всему миру?

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

appModule.run(['$rootScope', 'authFactory', function($rootScope, authFactory) { 
    $rootScope.authFactory = authFactory; 
}]); 
+0

Что делать, если служба находится в другом модуле? это будет работать? потому что прямо сейчас он не работает :( –

+0

Да, $ rootScope распространен для всех модулей вашего приложения. Он должен определенно работать. Можете ли вы воспроизвести демоверсию, возможно? Однако «другие модули» являются частью основного модуля приложения , правильно? – dfsq

0

Да, вы можете получить доступ к услугам по всему миру, ссылаясь на имени службы в главном корневом файле, где вы инъекционная зависимость

appModule.run(['$rootScope', 'authFactory', function($rootScope, authFactory) { 
    $rootScope.authFactory = authFactory; 
}]); 
+0

Вы только что скопировали код из моего ответа? Nice :) – dfsq

+0

@dfsq вы сделали код для записи, и то же самое, что я говорю в своем ответе, я просто даю ссылку –

Смежные вопросы