如何使AngularJS控制器依赖于通过ajax加载在rootScope上的值
How can I make an AngularJS controller depend on a value loaded on the rootScope via ajax?
我有一个像这样加载的应用程序:
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();
});
}
}]);
然后在另一个控制器中,我想根据用户是否登录(即是否设置了用户名)加载模板:
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';
}
}
如何使DataController依赖于$rootScope上异步加载的用户名值?
我曾想过使用promise,但我不确定如何将该状态传递给我的DataController。
谢谢!
在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
});
}
}]);
在您的控制器中:
$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';
}
});
默认情况下,显示一个加载屏幕,在事件处理程序中检查用户名并显示适当的模板
相关文章:
- 如何使用url加载程序在webpack中导入多个图像
- 如何在生成下载文件时显示加载动画
- 有没有任何方法可以将控制器从文件加载到ui路由器$stateProvider中
- 无法在通过jQuery的ajax加载的页面中执行javascript
- Emberjs应用程序加载在除Index之外的所有路由上
- 在chrome.tabs.onCreated之后加载HTML页面
- 单击F5时如何停止页面加载
- HTML5音频加载和播放获胜'我不能在iPad上工作
- 跟踪在页面加载时应用内联样式的JavaScript
- 在使用Polymer'加载所有json文件后执行方法;s的核心ajax
- jQuery Lazy加载动画滚动
- Html页面上的多个Base64图像和平滑加载
- 如何创建带有插槽的vue js组件预加载程序
- Webpack/Rect:遵循egghead.io教程,但出现错误:您可能需要一个合适的加载程序来处理此文件类型
- 如何使该数据在所有元素中加载
- Chrome扩展没有't在重新加载之前考虑期权价值
- 如何使AngularJS控制器依赖于通过ajax加载在rootScope上的值
- 角度:在初始化控制器之前重新加载$rootscope用户
- 当页面加载时在控制器之间传递数据,而不用在angularjs中使用$rootscope
- 如何在加载应用$rootScope中的所有部分后运行自定义 JavaScript