1

我正在使用Angular 1.4.1。 我做了一個指令,一個帶有縮略圖和鏈接的通用卡片。該鏈接是一個通用的絕對網址,但通常會導致應用程序內的某個地方。AngularJS-href在數據準備好之前重定向到相同的域導致頁面顯示

因此,假如我在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),也是如此。

這個問題似乎是,當我從「節」,以「細節」移動到剛剛發生,從相同的運行應用程序

希望能提供了一個很好的問題,解釋

UPDATE

我解決了這個問題,但爲了更好地理解我想指定服務功能。他們是這樣的

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(承諾)的決心

回答

1

的問題解決了使用。$承諾在決心(沒有雙關語意)

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返回一個承諾,因此它可以不指定。 $諾言,但服務請求必須

相關問題