Angular使服务可以从任何地方访问
Angular making a service accessable from everywhere
我有一个服务,我正在使用它来检查我的用户是否被允许查看我的应用程序中的内容。
我是这样用的:
<tab ng-controller="LibraryRTLController" ng-if="authFactory.hasFeature('ReadyToLearn')">
然而,它似乎不能正常工作,因为我必须在每个控制器中初始化它,这似乎是多余的。
所以我的问题是:有没有办法在全球范围内使用服务?
请注意,由于我无法在这里开始解释的原因,我必须使用ng-if
,因此属性指令对我没有帮助!
更新
所以我把它添加到我的运行函数中:
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()">
但是没有任何结果?
有什么方法可以让我在全球范围内使用服务吗?
您可以简单地将服务公开为$rootScope
属性,这样它就可以在每个模板中使用:
appModule.run(['$rootScope', 'authFactory', function($rootScope, authFactory) {
$rootScope.authFactory = authFactory;
}]);
是的,您可以通过在注入依赖的主根文件中引用服务名称来全局访问服务
appModule.run(['$rootScope', 'authFactory', function($rootScope, authFactory) {
$rootScope.authFactory = authFactory;
}]);
相关文章:
- 访问布局信息是否也会导致浏览器重排
- Javascript,访问一个主要对象模块模式中的每个对象
- 如何访问声音管理器2创建的声音对象
- 在Twitter上用ie9中的空白src访问iframe的contentWindow
- JavaScript Pub/Sub属性访问问题
- 从JavaScript访问struts操作中的属性
- 是否可以从父类访问子类的属性
- 如何访问fastOpt.js
- 访问JSON对象内部的数组元素
- 从模块内部访问Express装载路径
- 难以访问的JS环境中的语法错误
- 如何从对象的原型方法访问JavaScript对象属性
- 访问json数组中的对象
- 通过javascript/html访问twitter共享iframe
- Dojo:访问dijit.form.Select中单击的项目
- 访问外部调用方函数参数
- 如何访问访问过的链接历史记录
- 将Finuploader与ASP.NET Web表单一起使用.对严格模式调用方函数的访问被审查
- 使用postmessage进行跨域iframe访问-访问被拒绝
- “injector.js”中的“getService”是如何从angular中的调用方访问本地变量的