2016-04-20 63 views
1

我使用resolve來確定在將用戶帶到該頁面之前,URL中的ID是否實際上是有效的(通過API調用)。角度 - 不等待解決的路線

但是我發現只是短暫的一秒鐘,它確實進入了我的路線中指定的頁面。

一旦結果回來,字面意義上只有一次進入。

所以我的航線代碼如下:

.when("/story/:id", 
    { 
     templateUrl: "views/story.html", 
     controller: 'Story' , 
     controllerAs: 'story', 
     resolve:{ 
     "check":function($location, usefulService, $route){ 
      var myPromise = usefulService.isValidQuestionID($route.current.pathParams.id); 
      myPromise.then(function(result) { 
      if (result == false){ 
       $location.path('/'); 
      } 
      }) 
     } 
     } 
     } 
) 

,然後實際的API調用方法在我的服務:

self.isValidQuestionID = function(id) { 
    return $http.get(API + '/isValidQuestionID', { 
     headers:{ 
      idtocheck: id 
     } 
     }) 
     .then(function(res){ 
     return res.data.success; 
     }) 
} 

讚賞任何幫助,

感謝。

回答

1

那麼你好,再次userMod2。

如果您不想加載頁面,則需要返回拒絕的承諾。你可以這樣做:

function ($location, usefulService, $route) { 
    return usefulService.isValidQuestionID($route.current.pathParams.id) 
     .then(function (result) { 
      if (result == false) { 
       $location.path('/'); 
       return $q.reject(); 
      } 
     }); 
} 
+0

哈哈 - 嗨。我打算對之前的帖子發表評論,但是在這裏可以更容易。 – userMod2

+0

太棒了!這樣可行。但是,我並沒有100%的理解,通過做出被拒絕的承諾,阻止它像以前那樣加載頁面? – userMod2

+0

其實現在明白了「創建延期,然後立即拒絕」 – userMod2