AngularJS Resolve

时间:2014-09-24 10:28:20

标签: angular-services angular-promise

我正在创建我的第一个AngularJS应用程序。

我的索引页面有一个问题。 根据用户是否经过身份验证,可以有两个不同的模板。

我的想法是在ng-view和视图控制器(indexController,aboutController,...)之前定义MainController,具体取决于显示哪个视图。

我已经提供了服务UserService,其任务是从我的服务器获取用户的数据并将其提供给控制器。

问题是我希望 MainController 获取用户的数据。

我已阅读有关resolvepromise的内容,但它仅适用于视图控制器,因为它在$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的菜鸟。我真的很感激一些帮助。

提前谢谢。

2 个答案:

答案 0 :(得分:1)

我认为你必须写$ scope.currentUser = UserService.getCurrentUser();在角度js的run()方法中的行,这是应用程序加载时的第一次火灾

答案 1 :(得分:0)

实际上Config块在运行块之前运行。仅当您尝试在ng-route或ui-router中解析时,这才有意义。

  
      
  1. 配置块 - 在提供商注册和配置期间执行   相。只有提供程序和常量才能注入配置块。这是为了   防止在完全配置服务之前意外实例化服务。
  2.   
  3. 运行块 - 在创建注入器后执行并用于启动注入   应用。只有实例和常量才能注入运行块。这是为了防止   应用程序运行时进一步的系统配置。
  4.   

Line 122