2014-09-24 51 views
1

我正在創建我的第一個AngularJS應用程序。AngularJS Resolve

我有一種問題,我的索引頁。 根據用戶是否經過身份驗證,可能有兩個不同的模板。

我的想法是在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一個小白。我真的很感謝一些幫助。

預先感謝您。

回答

1

我認爲你必須寫$ scope.currentUser = UserService.getCurrentUser();在角JS的run()方法線這是當應用負荷

+0

我嘗試這樣做。這工作昨天,但這是因爲運氣。今天我注意到我的數據在頁面開始渲染後加載。渲染前有沒有辦法等待數據? – T00rk 2014-09-25 08:54:17

+1

對於那種嘗試在$ rootScope。$ on方法中寫入該行的方法,該方法在run方法內定義 – 2014-09-25 11:29:10

0

實際上配置塊運行塊之前運行第一火災。這隻有在您嘗試在ng-route或ui-router中解析時才相關。

  1. 配置塊 - 在供應商登記和配置 階段得到執行。只有提供者和常量可以注入到配置塊中。這是 在完全配置之前防止意外實例化服務。
  2. 運行塊 - 在創建注入器後執行並用於啓動 應用程序。只有實例和常量可以注入運行塊。這是爲了防止在應用程序運行期間進一步進行系統組態。

Line 122

相關問題