Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 离子4:无法读取属性';获取';未定义的_Angular_Typescript_Ionic Framework_Ionic4 - Fatal编程技术网

Angular 离子4:无法读取属性';获取';未定义的

Angular 离子4:无法读取属性';获取';未定义的,angular,typescript,ionic-framework,ionic4,Angular,Typescript,Ionic Framework,Ionic4,我试图通过get()函数从数据库中获取一些信息,但是当我尝试运行时,它会得到标题错误,声明 at HomeTabPage.push ../src/app/home-tab/home-tab.page.ts.HomeTabPage.ngOnInit (home-tab.page.ts: 18) 不,因为我已经尝试使用Elvis参数,但它不起作用。我已经将我的主函数从ngOnInit中传递出去,并声明了另一个要引用的函数,但它不起作用 主页选项卡.page.html 错误 HomeTabPag

我试图通过
get()
函数从数据库中获取一些信息,但是当我尝试运行时,它会得到标题错误,声明

at HomeTabPage.push ../src/app/home-tab/home-tab.page.ts.HomeTabPage.ngOnInit (home-tab.page.ts: 18)
不,因为我已经尝试使用Elvis参数,但它不起作用。我已经将我的主函数从ngOnInit中传递出去,并声明了另一个要引用的函数,但它不起作用


主页选项卡.page.html


错误

HomeTabPage_Host.ngfactory.js? [sm]:1 ERROR TypeError: Cannot read property 'get' of undefined
    at HomeTabPage.push../src/app/home-tab/home-tab.page.ts.HomeTabPage.ngOnInit (home-tab.page.ts:18)
    at checkAndUpdateDirectiveInline (core.js:22099)
    at checkAndUpdateNodeInline (core.js:23363)
    at checkAndUpdateNode (core.js:23325)
    at debugCheckAndUpdateNode (core.js:23959)
    at debugCheckDirectivesFn (core.js:23919)
    at Object.eval [as updateDirectives] (HomeTabPage_Host.ngfactory.js? [sm]:1)
    at Object.debugUpdateDirectives [as updateDirectives] (core.js:23911)
    at checkAndUpdateView (core.js:23307)
    at callViewAction (core.js:23548)

好的,有一个场景没有被代码处理。如果
firebase.auth().onAuthStateChanged
中未定义
user
,该怎么办?您的
this.adAllListRef
将不会被初始化,因此在这种情况下您也会得到相同的错误

我可能无法给出有效的代码,但我可以建议您处理此问题的方法:

由于此页面仅在
用户
有效时才起作用,因此请尝试使用如下内容:

import { Injectable } from '@angular/core';
import { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, Router, Route } from '@angular/router';
import { Observable } from 'rxjs';

@Injectable()
export class AuthGuard implements CanActivate {


  constructor(private _router: Router,private _advSvc: AdvertisingService) {
  }

  canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot): Promise<boolean> 
  {
    return new Promise((resolve) => {
      firebase.auth().onAuthStateChanged(user => {
         if (user) {
            resolve(true);
         }else{
           this._router.navigate(['/login']);
           resolve(false);
         }
      });
   }
}
并将路由器定义为:

  const route = [
    { .... },
    {path: '/home',component: HomeTabPage, canActivate: [AuthGuard] },
    {path: '/login',component: LoginPage }
  ]


发布服务代码问题不在于模板,而在于typescript代码。看这一行
this.adService.getAdAllList().get()。然后(…
它看起来像'getAdAllList()返回null,因此在未定义的值上调用get会引发错误。我发布了服务代码。你说的很有道理。使用此代码,我放置了service.ts,我试图请求的路径是错误的?我应该传递任何参数吗?你的问题是,你试图在它准备好之前访问它。我没有与Firebase合作过f我的建议是,我的意思是,Firebase很难找到一个好的Firebase教程,然后回到基础,否则即使它提供了ded.工作得很好。我举了一个使用firebase的例子,但没有意识到我需要在每次打开app.ty时查看用户是否登录
HomeTabPage_Host.ngfactory.js? [sm]:1 ERROR TypeError: Cannot read property 'get' of undefined
    at HomeTabPage.push../src/app/home-tab/home-tab.page.ts.HomeTabPage.ngOnInit (home-tab.page.ts:18)
    at checkAndUpdateDirectiveInline (core.js:22099)
    at checkAndUpdateNodeInline (core.js:23363)
    at checkAndUpdateNode (core.js:23325)
    at debugCheckAndUpdateNode (core.js:23959)
    at debugCheckDirectivesFn (core.js:23919)
    at Object.eval [as updateDirectives] (HomeTabPage_Host.ngfactory.js? [sm]:1)
    at Object.debugUpdateDirectives [as updateDirectives] (core.js:23911)
    at checkAndUpdateView (core.js:23307)
    at callViewAction (core.js:23548)
import { Injectable } from '@angular/core';
import { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, Router, Route } from '@angular/router';
import { Observable } from 'rxjs';

@Injectable()
export class AuthGuard implements CanActivate {


  constructor(private _router: Router,private _advSvc: AdvertisingService) {
  }

  canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot): Promise<boolean> 
  {
    return new Promise((resolve) => {
      firebase.auth().onAuthStateChanged(user => {
         if (user) {
            resolve(true);
         }else{
           this._router.navigate(['/login']);
           resolve(false);
         }
      });
   }
}
export class AdvertisingService {
  constructor() {
  }

  getAdAllList(): firebase.firestore.CollectionReference {
    return firebase.firestore().collection(`/adverts/adAll/adList`);
  }
}

  const route = [
    { .... },
    {path: '/home',component: HomeTabPage, canActivate: [AuthGuard] },
    {path: '/login',component: LoginPage }
  ]