2013-10-27 124 views
1

我正在嘗試爲angular-ui-router插件設置路由。在頁面上發生任何事情之前(無論哪條路線),都需要加載用戶的數據。然後基於用戶的數據(id,用戶名等)可以加載路由所需的其他數據組件。Angular-ui-router:用解決方案管理依賴關係

這種情況下是否存在一種模式?我想一種方法來解決這個問題,將添加用戶數據作爲路線的決心。但是,這不僅看起來非常多餘且效率低下,而且也不起作用(請參閱下面的代碼)。

這裏不起作用,因爲collectionlist決心不會等待userpanel決心完成(據我所知,這是預期的行爲)代碼示例:

.state('default', { 
     url: '/', 
     views: { 
      'userpanel' : { 
       templateUrl: 'js/partials/user_panel.html', 
       controller: 'userController', 
       resolve: { 
        user: function(UserResourceLoader) { 
         return UserResourceLoader(); 
        } 
       } 
      }, 
      'collectionlist' : { 
       templateUrl: 'js/partials/collection_list.html', 
       controller: 'collectionsController', 
       resolve: { 
        collectionsByUser: function(CollectionsByUserLoader, User) { 
         return CollectionsByUserLoader(User.data.id); 
        } 
       } 
      } 
     } 
    }) 

這個任何建議,非常有幫助。

回答

2

您應該可以創建一個父狀態,其中所有其他狀態都可以從該依賴關係繼承。

.state('root',{ 
    resolve: { 
     user: function(UserResourceLoader) { 
      return UserResourceLoader(); 
     } 
    } 
}) 
.state('root.default', { 
    url: '/', 
    views: { 
     'userpanel' : { 
      templateUrl: 'js/partials/user_panel.html', 
      controller: 'userController' 
     }, 
     'collectionlist' : { 
      templateUrl: 'js/partials/collection_list.html', 
      controller: 'collectionsController', 
      resolve: { 
       collectionsByUser: function(CollectionsByUserLoader, User) { 
        return CollectionsByUserLoader(User.data.id); 
       } 
      } 
     } 
    } 
})  

對嵌套狀態的更多信息,請參閱: https://github.com/angular-ui/ui-router/wiki/Nested-States-%26-Nested-Views

但是,這並不與

幫助collectionlist決心不等待userpanel決心結束(和我理解這是預期的行爲):

可能有更好的辦法,但你可以在UserResourceLoader中創建一個承諾,在完成加載後解析,然後在CollectionsByUserLoader中等待承諾並在承諾解決時使用數據。

編輯:更好的方法是使用嵌套的resolves。如果您將父函數的解析注入到子函數中。您不必等待其他決心的承諾。像這樣。

.state('root.default', { 
    ... 
    resolve: { 
      collectionsByUser: function(**user**, CollectionsByUserLoader, User) { 
         return CollectionsByUserLoader(User.data.id); 
        } 
       } 
} 
+0

謝謝!我認爲這可能是重構的原因。 – mariachimike

相關問題