Ons Tabbar портит при использовании Angular 2+ AuthGuard - PullRequest
0 голосов
/ 08 декабря 2018

Я использую Onsenui с Angular 6 Когда я использую директиву Onsenui Tabbar без использования Angular AuthGuard, она работает нормально.но когда я использую AuthGuard для компонента или говорю «canActivateChild: [AuthGuard]», он показывает эту ошибку каждый раз, когда я нажимаю на одну из вкладок, на которой находится AuthGuard.

ERROR Error: Uncaught (in promise): TypeError: page._show is not a function 
TypeError: page._show is not a function at HTMLElement._onPostChange         
(onsenui.js:30227) at onsenui.js:15293 at 
ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invoke 
(zone.js:388) at Object.onInvoke 
(core.js:3820) at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invoke 
(zone.js:387) at Zone.push../node_modules/zone.js/dist/zone.js.Zone.run 
(zone.js:138) at zone.js:872 at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invokeTask 
(zone.js:421) at Object.onInvokeTask 
(core.js:3811) at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invokeTask 
(zone.js:420) at HTMLElement._onPostChange (onsenui.js:30227) at onsenui.js:15293 at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invoke 
(zone.js:388) at Object.onInvoke 
(core.js:3820) at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invoke 
(zone.js:387) at Zone.push../node_modules/zone.js/dist/zone.js.Zone.run 
(zone.js:138) at zone.js:872 at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invokeTask 
(zone.js:421) at Object.onInvokeTask 
(core.js:3811) at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invokeTask 
(zone.js:420) at resolvePromise (zone.js:814) at zone.js:724 at zone.js:740 at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invoke 
(zone.js:388) at Object.onInvoke 
(core.js:3820) at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invoke 
(zone.js:387) at Zone.push../node_modules/zone.js/dist/zone.js.Zone.run 
(zone.js:138) at zone.js:872 at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invokeTask 
(zone.js:421) at Object.onInvokeTask (core.js:3811)

, а затем снова нажимаю на предыдущуюtab (initial-tab), он выдает эти ошибки.

ERROR Error: Uncaught (in promise): TypeError: prevTab.pageElement._hide is not a function TypeError: prevTab.pageElement._hide is not a function at HTMLElement._onPreChange (onsenui.js:30250) at Swiper._changeTo (onsenui.js:15285) at Swiper.setActiveIndex 
(onsenui.js:15104) at onsenui.js:30423 at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invoke 
(zone.js:388) at Object.onInvoke 
(core.js:3820) at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invoke 
(zone.js:387) at Zone.push../node_modules/zone.js/dist/zone.js.Zone.run 
(zone.js:138) at zone.js:872 at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invokeTask 
(zone.js:421) at HTMLElement._onPreChange 
(onsenui.js:30250) at Swiper._changeTo (onsenui.js:15285) at Swiper.setActiveIndex (onsenui.js:15104) at onsenui.js:30423 at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invoke 
(zone.js:388) at Object.onInvoke 
(core.js:3820) at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invoke 
(zone.js:387) at Zone.push../node_modules/zone.js/dist/zone.js.Zone.run 
(zone.js:138) at zone.js:872 at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invokeTask 
(zone.js:421) at resolvePromise 
(zone.js:814) at zone.js:877 at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invokeTask 
(zone.js:421) at Object.onInvokeTask 
(core.js:3811) at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invokeTask 
(zone.js:420) at Zone.push../node_modules/zone.js/dist/zone.js.Zone.runTask 
(zone.js:188) at drainMicroTaskQueue 
(zone.js:595) at ZoneTask.push../node_modules/zone.js/dist/zone.js.ZoneTask.invokeTask [as invoke] 
(zone.js:500) at invokeTask (zone.js:1540) at HTMLElement.globalZoneAwareCallback (zone.js:1566)
  • Как воспроизвести

Добавление этого файла AuthGuard приводит к ошибке.

import { Injectable } from '@angular/core';
import {
CanActivate,
ActivatedRouteSnapshot,
RouterStateSnapshot,
Router,
CanActivateChild
} from '@angular/router';
import { Observable } from 'rxjs';
import { map, take, tap } from 'rxjs/operators';
import { AngularFireAuth } from '@angular/fire/auth';
import { AuthService } from './auth.service';
@Injectable({
providedIn: 'root'
})`
export class AuthGuard implements CanActivate, CanActivateChild {

constructor(
private auth: AuthService,
private router: Router ) { }
canActivateChild(childRoute: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean | Observable | Promise {
console.log('inside authguard')
return this.auth.user.pipe(
take(1),
map(user => !!user),
tap(loggedIn => {
if (!loggedIn) {
console.log('access denied:you must be logged in');
this.router.navigate(['/login']);
}
})
);
}
canActivate(
next: ActivatedRouteSnapshot,
state: RouterStateSnapshot
): Observable | Promise | boolean {
return this.auth.user.pipe(
take(1),
map(user => !!user),
tap(loggedIn => {
if (!loggedIn) {
console.log('access denied');
this.router.navigate(['/login']);
}
})
);
}
}
...