[英]How can I make an AngularJS controller depend on a value loaded on the rootScope via ajax?
I have an app that is loaded like so: 我有一个这样加载的应用程序:
app.js: app.js:
angular.module('App', []).run(['$rootScope', '$q', 'SessionManager', 'EndpointService',
function ($rootScope, $q, SessionManager, EndpointService) {
$rootScope.username = SessionManager.getUsername();
if (!$rootScope.username) {
EndpointService.getUser()
.success(function (data) {
data = angular.fromJson(data.data);
SessionManager.setUsername(data['username']);
$rootScope.username = SessionManager.getUsername();
});
}
}]);
Then in a different controller I want to load a template based on whether the user is logged in or not (ie if username is set): 然后在另一个控制器中,我想根据用户是否登录(即,如果设置了用户名)来加载模板:
DataController.js: DataController.js:
function DataController($scope, $state, $stateParams, $http, $log, $location, $rootScope, $q) {
if($rootScope.username) {
var template = 'static/partials/auth_table.html';
} else {
var template = 'static/partials/login.html';
}
}
How can I make DataController dependent on the username value asynchronously loaded on $rootScope? 如何使DataController依赖于$ rootScope异步加载的用户名值?
I thought about using a promise, but I'm not sure how to pass that state to my DataController. 我考虑过使用Promise,但是我不确定如何将该状态传递给DataController。
Thanks! 谢谢!
In your app.js
在您的app.js
angular.module('App', []).run(['$rootScope', '$q', 'SessionManager', 'EndpointService',
function ($rootScope, $q, SessionManager, EndpointService) {
$rootScope.username = SessionManager.getUsername();
if (!$rootScope.username) {
EndpointService.getUser()
.success(function (data) {
data = angular.fromJson(data.data);
SessionManager.setUsername(data['username']);
$rootScope.username = SessionManager.getUsername();
// after this step, broadcast the event
$rootScope.$broadcast('user-loggedin');
// pass data if required
});
}
}]);
In your controller: 在您的控制器中:
$scope.$on('user-loggedin', function(event, data) {
var template;
// do what you want to do
if($rootScope.username) {
template = 'static/partials/auth_table.html';
} else {
template = 'static/partials/login.html';
}
});
By default show a loading screen, inside the event handler check for user name and show the appropriate template 默认情况下,显示加载屏幕,在事件处理程序中检查用户名并显示适当的模板
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.