我正在使用Angular 1.4.1。
我做了一个指令,一张带有缩略图和链接的通用卡片。该链接是通用的绝对URL,但通常会导致该应用内的某处。

因此,假设我在https://stackoverflow.com/section/中,可能会有一张带有https://stackoverflow.com/section/detail链接的卡片

我有一个与此类似的app.js(我只发布了感兴趣的路线部分)



.state('base.section', {
          url: 'section/',
          views: {
              '@': {
                  templateUrl: 'views/section.html',
                  controller: 'SectionController'
              }
          },
          resolve: {
              'items': function (SomeService) {
                  console.log("items resolve triggered");
                  return SomeService.doThingsReturnPromise();
              }
          }
}
.state('base.section.detail', {
          url: 'detail',
          views: {
              '@': {
                  templateUrl: 'views/detail.html',
                  controller: 'DetailController'
              }
          },
          resolve: {
              'items': function (items) {
                  return items;
              },
              'stuff': function(SomeOtherService) {
                  console.log("stuff resolve triggered.");
                  return SomeOtherService.doThingsReturnPromise();
              }
          }
}
                  





所以问题是当我点击



<a ng-href="https://stackoverflow.com/section/detail">





我可以正确地重定向到详细信息页面,但是在解决方案中的承诺被完全解决之前,我会显示所有类似角度的变量({{somethingLikeThis}})。

即使触发了解析,(我可以在控制台中看到日志)似乎只是Angular不会等到解析完成后再加载控制器,因为它应该表现出来。

当然,如果重新加载详细信息页面,则所有值都将完全加载。如果移至另一个站点部分(https://stackoverflow.com/baloons),则相同。

当我从同一运行的应用程序中将“节”移到“详细信息”时,似乎出现了问题

希望能提供一个很好的问题解释

更新

我解决了问题,但是为了更好地理解,我想指定服务功能。他们是这样的



angular.module('myApp')
.factory('SomeService',
function ($resource, serverURL, protocol, requestFormat) {
        return $resource(serverURL + 'backendUrl/',
            {
                callback: 'JSON_CALLBACK',
                format: requestFormat
            },
            {
                doThingsReturnPromise: {
                    method: protocol,
                    isArray: true
                }
            });

});





仅出于完整性考虑,即使在解决方案中使用$ q.all(promises),问题仍然存在

最佳答案

在解决方案中使用。$ promise解决的问题(无双关语)



resolve: {
    'items': function (SomeService) {
        console.log("items resolve triggered");
        return SomeService.doThingsReturnPromise().$promise;
    }





$ q.all我遇到了相同的问题,解决方案是相同的,只是略有不同



resolve: {
    'items': function (SomeService, SomeOtherService, $q) {
        var promises = [
            SomeService.doThingsReturnPromise().$promise,
            SomeOtherService.doThingsReturnPromise().$promise
        ];
        return $q.all(promises);
    }
}





$ q.all返回一个promise,因此它无需指定。$ promise就可以工作,但是服务请求必须

09-25 16:54
查看更多