Angularjs ui-router抽象状态解析为http请求

时间:2016-02-23 07:51:17

标签: angularjs angular-ui-router

我看到了这个主题,但这个解决方案无法解决我的问题。

Angularjs ui-router abstract state with resolve

我想尽快描述我的问题。

我必须说明其中一个是抽象的(父母),其中两个人有决心。两个解析make http但子状态不要等父解析结果。孩子如何解决等待父州解决问题

首先进入父状态它没关系,然后去儿童状态,但是儿童状态不要等待父http结果

我的计划是这样的。在所有状态(用于页面刷新)我检查用户cookie如果存在再次加载用户(进行http调用)

所有子状态都使用此用户信息并获取用户的相关数据。

所以我首先需要完成抽象解析http调用。

.state('app', {
      url: '/app',
      abstract: true,
      templateUrl: Route.base('app.html'),
      resolve: {
          userExist: ['api', function (api) {

                  var currentUser = cacheService.getUser();

                      api.loginExistUser(currentUser).then(function (result) {
                          api.setUser(result.data, true);
                      });
          }]
      }
  })

 .state('app.myFriends', {
         url: '/myLingpals',
         templateUrl: "myFriends.html",
         controller: "myFriendsController",
         controllerAs: "vm",
         resolve: {
             myFriends: ['api' function (api) {
                 return api.get("myfriends");

             }]
         }
     })

2 个答案:

答案 0 :(得分:2)

只需在函数中添加一个返回值:)

return api.loginExistUser(currentUser).then(function (result) {
                      api.setUser(result.data, true);
                  });

答案 1 :(得分:0)

感谢你的回答walfrat。但你的解决方案还不够。我尝试着解决问题的方法,在你的帮助下我找到了解决方案。

当我将父解析数据添加到子状态解析依赖关系子解析等待响应时。再次感谢

 .state('app', {
  url: '/app',
  abstract: true,
  templateUrl: Route.base('app.html'),
  resolve: {
      **userExist**: ['api', function (api) {

              var currentUser = cacheService.getUser();

                  api.loginExistUser(currentUser).then(function (result) {
                      api.setUser(result.data, true);
                  });
      }]
  }
 }).state('app.myFriends', {
     url: '/myLingpals',
     templateUrl: "myFriends.html",
     controller: "myFriendsController",
     controllerAs: "vm",
     resolve: {
         myFriends: ['api','userExist', function (api,**userExist**) {

             return api.get("myfriends");

         }]
     }
 })