2013-10-27 74 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

相关问题