我正在创建我的第一个AngularJS应用程序。
我的索引页面有一个问题。 根据用户是否经过身份验证,可以有两个不同的模板。
我的想法是在ng-view和视图控制器(indexController,aboutController,...)之前定义MainController
,具体取决于显示哪个视图。
我已经提供了服务UserService
,其任务是从我的服务器获取用户的数据并将其提供给控制器。
问题是我希望 MainController 获取用户的数据。
我已阅读有关resolve
和promise
的内容,但它仅适用于视图控制器,因为它在$routeProvider
中定义。
我的问题是如何在执行我的应用路由之前初始化MainController
数据?
PS:一些帮助的代码
的index.html
<div id="page" ng-controller="MainController as Main">
<div id="navbar-container" class="shadow1">
<navbar></navbar>
</div>
<div class="row">
<div id="page-container" class="large-12 columns">
<div ng-view></div>
</div>
</div>
</div>
mainController.js
...
define([], function()
{
return angular.module('MyApp.controllers', []).controller('MainController', ['$scope', '$http', 'UserService', function($scope, $http, UserService)
{
// I want this to be defined before executing the app //
$scope.currentUser = UserService.getCurrentUser();
}]);
});
...
userService.js
define(['angular'], function (angular)
{
return angular.module('MyApp.services', []).service('UserService', ['$http', function($http)
{
var _currentUser = null;
var _promise = (_currentUser !== null) ? _currentUser : $http.get('/api/user').success(function(data)
{
_currentUser = data.result;
});
return {
promise : _promise,
getCurrentUser : function()
{
return _currentUser;
},
isAuthenticated : function()
{
return (_currentUser !== null);
},
};
}
]);
});
也许还有另一种方法可以做我期望的但是我真的是一个使用AngularJS的菜鸟。我真的很感激一些帮助。
提前谢谢。
答案 0 :(得分:1)
我认为你必须写$ scope.currentUser = UserService.getCurrentUser();在角度js的run()方法中的行,这是应用程序加载时的第一次火灾
答案 1 :(得分:0)
实际上Config块在运行块之前运行。仅当您尝试在ng-route或ui-router中解析时,这才有意义。
- 配置块 - 在提供商注册和配置期间执行 相。只有提供程序和常量才能注入配置块。这是为了 防止在完全配置服务之前意外实例化服务。
- 运行块 - 在创建注入器后执行并用于启动注入 应用。只有实例和常量才能注入运行块。这是为了防止 应用程序运行时进一步的系统配置。
醇>