2015-02-24 21 views
0

我需要在控制器加載之前解析控制器中的數據。所以我決定在路由器上這樣做。但我想知道如何做到這一點,不要在路由器和控制器之間分離邏輯。所以我做了一些研究,並找出託德座右銘表明,在控制器創建resolve功能,比路由器使用它:如何更好地解決Angular + ui-router中的控制器的數據

main.controller.coffee

(-> 

    Main = (someService) -> 
    @data = someService.data 

    return 

    Main.resolve =() -> 
    someService: (someService) -> 
     someService.getAll() 

    Main 
    .$inject = ['someService'] 

    angular 
    .module('app') 
    .controller('Main', Main) 
)() 

app.routes.coffee

(-> 

    routes = ($stateProvider, $urlRouterProvider) -> 

    $urlRouterProvider.otherwise "/home" 

    $stateProvider 
     .state 'main', 
     url: '/' 
     templateUrl: 'app/layout/main.html' 
     resolve: Main.resolve 
     controller: 'Main' 
     controllerAs: 'main' 

    routes.$inject = ['$stateProvider', '$urlRouterProvider'] 

    angular 
    .module('app') 
    .config(routes) 

)() 

問題是,當我將所有模塊包裹在一個IIFE(爲了避免污染全局名稱空間)時,主控制器在路由器中不可訪問(未定義)。有人能告訴我如何解決這個問題嗎?

+0

您可以從您的控制器分離的決心功能,使解決內部的一些登錄和其追加到$範圍,那麼它應該是從你的控制器訪問。 – 2015-02-24 09:04:43

+0

Avraam,我需要從主控制器的解決方案可以像這樣解決路由器到達:Main.resolve – 2015-02-24 09:51:21

回答

0

你可以試試這個,

(-> 

     routes = ($stateProvider, $urlRouterProvider) -> 

     $urlRouterProvider.otherwise "/home" 

     $stateProvider 
      .state 'main', 
      url: '/' 
      templateUr 

l: 'app/layout/main.html' 
     resolve: { 
      main: function() { 
        return Main.resolve; 
     }, 
     controller: 'Main' 
     controllerAs: 'main' 

    routes.$inject = ['$stateProvider', '$urlRouterProvider'] 

    angular 
    .module('app') 
    .config(routes) 

)() 
+0

不幸的是,它不適合我。當我在Chrome中調試這個代碼時,Main是,它的解析函數沒有被調用 – 2015-02-24 09:39:19

相關問題