2016-03-17 2 views
4

Я немного обновил свои проекты и зависимости. Всякий раз, когда я создаю страницу в первый раз, (кроме корня), она не работает сразу.ionic2 Просмотров не обновляется, код выполняет

F/e У меня есть корневая страница, которая является формой входа. Всякий раз, когда токен присутствует в localStorage, он будет предоставлен эмиттером на страницу входа. Затем введенный NavController нажимает мою главную страницу, TabController.

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

Затем на странице вкладок Первая вкладка не отображается, однако, когда я нажимаю первый вкладку, то же самое для других вкладок, их нужно дважды щелкнуть (панель вкладок активируется только при двойном щелчке). После этого все работает нормально, но, конечно же, не то, что мы хотим. Вот видео о том, что Я вижу.Если вы приостанавливаете видео в 0.0, вы видите, что состояние журнала совпадает с токеном. Это как в коде, прямо перед нажатием. Новая страница инициируется, представления просто не обновляются, пока я не щелкнул элемент, такой как вход.

ngOnInit() { 
    this.sessionService.subscribe(token => { 
     if (token && token.length) { 
      console.log("token returned success!", token, this.navController); 
      setTimeout(() => { this.navController.push(<any>MainTabs); }, 250); 
     } else { 
      console.log("token returned", token); 
     } 
    }); 
} 

Ошибки в журнале угловые2 & ионные в браузере.

Итак, когда вы видите, когда нажата кнопка Push, которая не выглядит так, как следует, первая страница показывает загрузчик. Это должно исчезнуть после загрузки содержимого (он загружен. Я видел триггер console.logs, который устанавливает значение). Если бы я дважды щелкнул по элементу первой вкладки, он покажет содержимое. Я выбрал кнопку «Acties», которая отобразила первую вкладку (обратите внимание, что я нажал на третью). Нажав на четвертый, отобразите третью страницу, после этого они были обработаны один раз, а клики работают, как ожидалось.

Wierd?

+0

У меня нет доступа к видео (доступ запрещен). .. Что делает 'sessionService'? –

+0

Истек срок действия видеоизображения Ah shucks. Не важно, что делает sessionService, однако он хранит такие вещи, как токены и т. Д. В localStorage. при запуске приложения он проверяет хранилище и передает его подписчикам. (токен). Таким образом, они могут справиться с этим и предположить, что он является сессионным. Как только он окажется недействительным, он очистит токен и испустят его и т. Д. –

+0

Это позволяет мне думать о проблеме с зонами. Вы пытаетесь выполнить подписанный обратный вызов в зоне с классом «NgZone»? См. Https: // угловой.io/docs/ts/latest/api/core/NgZone-class.html –

ответ

7

Вы можете попробовать добавить грязное исправление с tick()

@App({ 
    template: ` 
    <ion-tabs (change)="_onTabChange()"> 
     <ion-tab tabIcon="heart" [root]="tab1"></ion-tab> 
     <ion-tab tabIcon="star" [root]="tab2"></ion-tab> 
    </ion-tabs>` 
}) 
class MyApp { 
    constructor(private _applicationRef : ApplicationRef) { 
    this.tab1 = Tab1; 
    this.tab2 = Tab2; 
    } 

    private _onTabChange() : void { 
    setTimeout(() => { 
     this._applicationRef.tick(); 
    }, 200); 
    } 
} 

Видимо никто подвох заключается в удалении ионного-х polyfills

+0

Это изменение, похоже, не работает, но вызов тика хорош, я могу поместить его во все конструкторы или w/e. –

+0

Просто выяснилось, что хуже, после любого запроса API, он не обновляет представление, поэтому мне нужно будет делать галочку каждый раз, когда будет получен ответ. е. yeah –

+1

@MathijsSegers Это почти похоже на то, что в 'ionic.bundle.js' они не добавили' angular-polyfills.js' ... – PierreDuc

2

Это не постоянное решение, я вполне уверен; Однако, как указано в комментариях @PiereDuc, это может быть разрешено путем принудительного применения application.tick

поэтому в вашем основном компоненте приложения (это компонент?). Вы вводите ApplicationRef, тогда вы можете сделать что-то вроде.

setInterval(() => { app.tick(); }, 400); 

Это отвратительно, но пока оно работает. Я обновлю это, когда узнаю, что происходит.

+0

Прекрасно работает. Пользуемся этим в версии 2.0.0-rc.2. Если эта проблема представлений не обновляется при использовании события 'firebase.auth(). OnAuthStateChanged'. На данный момент это решает. – Guus

+0

Попытайтесь выяснить, что-то не так, потому что вам это не нужно. Моя проблема была двойная/ненужная polyfills. –

+0

Мое демо-приложение - это просто шаблон вкладки, созданный ионным кли. Я вижу в консоли, что моя переменная страницы изменена, но не отражена в представлении. Также имейте это при использовании 'this.events.publish' и' this.events.subscribe'. Я вижу, что событие запущено, а набор переменных, но просмотр не обновляется. – Guus

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