Angular/Ионный - контроллер работает только один раз

Я начинаю с Angular через Ionic Framework, но я не понимаю, почему контроллер работает только один раз, т.е. меняю состояние, запускает контроллер, переключается в другое состояние, а затем обратно и контроллер не выполняет запустить второй раз. Это мое состояние:

$stateProvider.state( 'container.previous', {
    url: 'previous',
    views: {
        main : {
            templateUrl : 'views/previous.html',
            controller : function( $scope, $cordovaSQLite ){
                $scope.firms = [];
                $cordovaSQLite.execute(window.db, "SELECT * FROM recent GROUP BY phone ORDER by id DESC").then(function(res) {
                    for (i = 0; i < res.rows.length; i++) {
                        $scope.firms.push(res.rows.item(i));
                    }
                }, function (err) {
                    console.error(err);
                });
            }
        }
    },
    onStateChangeStart : function(){
        backButton = true;

    }
});

В другом состоянии, если вы нажмете кнопку, связанную с "фирмой", она сохранит данные "фирм" в локальном хранилище. Вышеуказанное состояние показывает фирмы, в которые вы ранее нажали. Но я не могу понять, как правильно обновить $scope.firms, поскольку контроллер никогда не запускается снова.

Может ли кто-нибудь помочь мне?

Ответ 1

Вы можете поместить код, который хотите запустить, в $ionicView.enter:

controller : function( $scope, $cordovaSQLite ){
    $scope.$on('$ionicView.enter', function() {
        // code to run each time view is entered
    });

    ...
});

См. "Просмотр жизненного цикла и событий": http://ionicframework.com/docs/api/directive/ionView/

Ответ 2

Основываясь на ответе @brandyshea, я бы хотел добавить, если вы хотите указать отсутствие кеширования в одной области/контроллере/состоянии и использовать кеширование в других областях, вы можете просто использовать параметр cache в своем $stateProvider для этого состояния.

Отключить кеш в государственном провайдере

$stateProvider.state('myState', {
  cache: false,
  url : '/myUrl',
  templateUrl : 'my-template.html'
})

В качестве альтернативы вы также можете использовать один из других методов:

Отключить кеш с атрибутом

<ion-view cache-view="false" view-title="My Title!">
...
</ion-view>

Отключить кеш глобально $IonicConfigProvider может использоваться для установки максимально допустимых видов, которые могут быть кэшированы, но это также может быть использовано для отключения всех кеширования, установив его на 0.

$ionicConfigProvider.views.maxCache(0);

Ссылки: http://ionicframework.com/docs/api/directive/ionNavView/ и http://ionicframework.com/docs/api/directive/ionView/

Ответ 3

Вам не нужно отключать кеш всего приложения. Если вы хотите повторно запускать контроллер каждый раз, когда вы вводите его, вы должны очистить кеш, прежде чем покинуть его:

 $scope.$on("$ionicView.afterLeave", function () {
         $ionicHistory.clearCache();
 }); 

Ответ 4

В Ionic встроен механизм кэширования. Вы можете отключить кэширование по всему миру в своей конфигурации, например:

$ionicConfigProvider.views.maxCache(0);

Ответ 5

Поместите это в свой ионный вид.

<ion-view cache-view="false">