我需要.RUN访问一个变量()模块中的角度和需要改变在不同的控制器
问题描述:
.run(['$rootScope', '$state', 'Session', function ($rootScope, $state, Session) {
$rootScope.$on('$stateChangeStart', function (e, toState) {
console.log('inside .run')
if (toState.url == '/') {
e.preventDefault();
if (Session.user) { // and isAdmin == true
$state.go('admin')
} //if isAdmin == false redirect to chat
else {
$state.go('login')
}
} else if (!Session.user && toState.url != '/login') {
e.preventDefault();
$state.go('login')
}
return;
});
}])
它的值这是我的.RUN模块和我需要初始化一个isAdmin
变量,我可以在我的控制器中更改并检查每个状态更改是否为isAdmin is
,并重定向到admin
或chat
页面。 我试图加入初始化isAdmin
为$rootScope.isAdmin
在.run()
但我可以修复它的价值在控制器.run()
抛出isAdmin
未定义的错误。 任何人都可以提出解决方法吗?我需要.RUN访问一个变量()模块中的角度和需要改变在不同的控制器
在此先感谢
答
审查下面的代码它可以访问范围variables.Inject服务将访问的变量和方法是可变palces可重复使用的空闲方式。
MyCtrl.js
(function() {
'use strict'
function MyCtrl($rootScope, $scope, MyService) {
MyService.getRootScopeData();
MyService.setRootScopeData('How are you?');
}
angular
.module("AppRootTest")
.controller('MyCtrl', ["$rootScope", "$scope", "MyService", MyCtrl]);
}());
MyService.js
(function() {
'use strict'
function MyService($rootScope) {
function getRootScopeData() {
console.log("$rootScope.getRooScopeData");
console.log($rootScope.someData);
return $rootScope.someData;
}
function setRootScopeData(value_) {
$rootScope.someData = {message: value_};
}
return ({
getRootScopeData: getRootScopeData,
setRootScopeData: setRootScopeData
});
}
angular
.module("AppRootTest")
.service("HzPopupService", ['$rootScope', MyService])
}());
app.js
angular.
module('AppRootTest', ['ngResource','ngCookies','ngRoute','ui.router',])
.config()
.run(['$rootScope', function ($rootScope) {
$rootScope.someData = {message: "hello"};
}]);
您是否尝试致电服务? –
这对于在每个控制器中获得价值非常有帮助 –
ui-state在控制器加载之前有4个事件,您必须检查该变量是否具有设置的值 –