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">