Angular-ui-router: выполнение асинхронного вызова через переход состояния

Я пытаюсь сделать асинхронный вызов API, вызванный onEnter к новому .государство

onEnter: function(StatFactory){ 
                StatFactory.getStats(function(res){
                    console.log("callback");
            });
    }

что я заметил до сих пор, так это то, что он сначала вызывает асинхронную функцию, затем создает экземпляр контроллера для нового состояния и, наконец, запускает обратный вызов.

Функция обновит данные внутри фабрики, но область $обновляться не будет.

Я подумал, что, возможно, мне нужно заставить $применить новый $scope, но я не знаю, как.

Есть идеи? (Я новичок)

1 ответ

  1. Насколько я знаю, onEnterне предоставляет вам $scopeпривязать результаты.

    Вы можете либо вызвать функцию при создании контроллера (т. е. блок определения контроллера), либо использовать resolveсостояние param (Примечание: это приведет к тому, что состояние не будет активировано, если асинхронная функция терпит неудачу).

    Вот пример с resolve:

    $stateProvider.state('home', {
     ...
     //Will wait for the getStats call to end. You can inject the stats to the controller now.
     resolve: {
      stats: function(StatFactory) { return  StatFactory.getStats(); }
     },
     controller: function($scope, stats){
      //Use stats
      $scope.stats = stats;
     }
    });