2016-04-20 4 views
1

Я использую resolve, чтобы определить, действительно ли идентификатор в URL-адресе (по вызову 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

Haha - привет. я собирался прокомментировать предыдущий пост, однако подумал, что здесь легче. – userMod2

+0

Удивительный! Это работает. Однако я не понимаю 100%, выполнив отклоненное обещание, что мешает ему загружать страницу, как это было раньше? – userMod2

+0

На самом деле поймите это сейчас, «создайте отложенное, а затем немедленно отклоните его» – userMod2

Смежные вопросы