Очистить историю и перезагрузить страницу при входе / выходе с помощью Ionic Framework



Я новичок в разработке мобильных приложений с ионной. При входе и выходе из системы мне нужно перезагрузить страницу, чтобы обновить данные, однако,$state.go('mainPage') возвращает пользователя в представление без перезагрузки-контроллер за ним никогда не вызывается.



есть ли способ очистить историю и перезагрузить состояние в Ionic?

738   14  

14 ответов:

Добро пожаловать в основу! На самом деле маршрутизация в Ionic питается от ui-router. Вы, вероятно, должны проверить это предыдущий, так что вопрос найти несколько различных способов сделать это.

Если вы просто хотите, чтобы перезагрузить, вы можете использовать:

$state.go($state.current, {}, {reload: true});

Если вы действительно хотите перезагрузить страницу (например, вы хотите перезагрузить все), то вы можете использовать:

$window.location.reload(true)

удачи!

я обнаружил, что ответ Джимтедева работал только тогда, когда определение состояния было cache:false set. С видом в кэше, вы можете сделать $ionicHistory.clearCache() а то $state.go('app.fooDestinationView') Если вы переходите из одного состояния в другое, которое кэшируется, но нуждается в обновлении.

смотрите мой ответ здесь, поскольку он требует простого изменения на ионный, и я создал запрос на вытягивание:https://stackoverflow.com/a/30224972/756177

правильный ответ:

$window.location.reload(true);

Я нашел решение, которое помогло мне сделать это. Установка cache-view="false" on ion-view тег решил мою проблему.

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

перезагрузить страницу не лучший подход.

вы можете обрабатывать события изменения состояния для перезагрузки данных без перезагрузки самого представления.

читать про жизненный цикл ionicView здесь:

http://blog.ionic.io/navigating-the-changes/

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

$scope.$on('$ionicView.beforeEnter', function(){
  // Any thing you can think of
});

в моем случае мне нужно просто посмотреть и перезапустить контроллер. Я мог бы получить свое намерение с этим фрагментом:

$ionicHistory.clearCache([$state.current.name]).then(function() {
  $state.reload();
}

кэш все равно работает и, кажется, что просто вид очищается.

ionic --version говорит 1.7.5.

ни одно из решений, упомянутых выше, не работало для имени хоста, которое отличается от localhost!

мне пришлось добавить notify: false в список опций, которые я передаю $state.go, чтобы избежать вызова слушателей углового изменения, перед $window.location.reload вызова вызывается. Окончательный код выглядит так:

$state.go('home', {}, {reload: true, notify: false});

>>> EDIT - $timeout может потребоваться в зависимости от Вашего браузера >>>

$timeout(function () { $window.location.reload(true); }, 100);

подробнее об этом ui-router reference.

Я пытался сделать обновить страницу с помощью angularjs когда я увидел веб-сайты я запутался, но код не работал для кода, то я получил решение для перезагрузки страницы с помощью

$state.go('path',null,{reload:true});

используйте это в функции, которая будет работать.

мне нужно было перезагрузить состояние, чтобы полосы прокрутки работали. Они не работали при прохождении через другое государство - "прописку". Если приложение было принудительно закрыто после регистрации и снова открылось, т. е. оно перешло непосредственно в состояние "home", полосы прокрутки работали. Ни одно из вышеперечисленных решений не сработало.

когда после регистрации, Я заменил:

$state.go("home");

С

window.location = "index.html"; 

приложение перезагрузилось, и полосы прокрутки работали.

контроллер вызывается только один раз, и вы должны сохранить эту логическую модель, что я обычно делаю:

Я создаю метод $scope.reload(params)

в начале этого метода я вызываю $ionicLoading.show({template:..}) чтобы показать мой пользовательский счетчик

когда может перезагрузить процесс завершен, я могу позвонить $ionicLoading.hide() как обратный вызов

наконец, внутри кнопки Обновить, я добавляю ng-click = "reload(params)"

единственным недостатком этого решения является то, что вы теряете ионной навигации история системы

надеюсь, что это помогает!

Если вы хотите перезагрузить после изменения вида вам нужно

$state.reload('state',{reload:true});

Если вы хотите сделать этот вид новым "корнем", вы можете сказать ionic, что следующий вид это будет корень

 $ionicHistory.nextViewOptions({ historyRoot: true });
 $state.go('app.xxx');
 return;

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

app.config(function ($stateProvider, $urlRouterProvider, $ionicConfigProvider) {

$ionicConfigProvider.views.maxCache(0);

.состояние (url: '/ url', контроллер: Ctl, templateUrl: 'template.HTML-файлов, кэша: нет) кэш: false = = > решил мою проблему !

как указано @ezain перезагружать контроллеры только тогда, когда это необходимо. Другим более чистым способом обновления данных при изменении состояний вместо перезагрузки контроллера является использование широковещательных событий и прослушивание таких событий в контроллерах, которым необходимо обновить данные в представлениях.

пример: в ваших функциях входа / выхода вы можете сделать что-то вроде этого:

$scope.login = function(){
    //After login logic then send a broadcast
    $rootScope.$broadcast("user-logged-in");
    $state.go("mainPage");
};
$scope.logout = function(){
   //After logout logic then send a broadcast
   $rootScope.$broadcast("user-logged-out");
   $state.go("mainPage");
};

теперь в контроллере mainPage вызвать изменения в представлении с помощью функции $on чтобы прослушать трансляцию в контроллере mainPage, например:

$scope.$on("user-logged-in", function(){
     //update mainPage view data here eg. $scope.username = 'John';
});

$scope.$on("user-logged-out", function(){
    //update mainPage view data here eg. $scope.username = '';
});

Я перепробовал много методов, но нашел этот метод абсолютно правильным:

$window.location.reload();

надеюсь, что это поможет другим застрял в течение нескольких дней, как я с версией: angular 1.5.5, ionic 1.2.4, angular-ui-router 1.0.0

Comments

    Ничего не найдено.