Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/31.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 Can';t在这个.afAuth.authState.subscribe()方法之外读取uid,它在我重新加载页面后表示uid未定义_Angular_Firebase_Firebase Realtime Database_Angularfire2 - Fatal编程技术网

Angular Can';t在这个.afAuth.authState.subscribe()方法之外读取uid,它在我重新加载页面后表示uid未定义

Angular Can';t在这个.afAuth.authState.subscribe()方法之外读取uid,它在我重新加载页面后表示uid未定义,angular,firebase,firebase-realtime-database,angularfire2,Angular,Firebase,Firebase Realtime Database,Angularfire2,*这是我的产品。服务,在我重新加载页面后uid未定义,但它是在我第一次登录后定义的,我不知道为什么,请任何人帮助我发现这个问题,我搜索了,但我没有找到解决方案,我问了很多人,但没有人回答我,我是新手 import { Injectable, EventEmitter, Output } from "@angular/core"; import { AngularFireDatabase, FirebaseListObservable } from 'angular

*这是我的产品。服务,在我重新加载页面后uid未定义,但它是在我第一次登录后定义的,我不知道为什么,请任何人帮助我发现这个问题,我搜索了,但我没有找到解决方案,我问了很多人,但没有人回答我,我是新手

        import { Injectable, EventEmitter, Output } from "@angular/core";
        import { AngularFireDatabase, FirebaseListObservable } from 'angularfire2/database-deprecated';
        import * as firebase from 'firebase/app';
        import { AngularFireAuth } from 'angularfire2/auth';

        import { Product } from "./models/product.model";
        import { METHODS } from "http";

    @Injectable()
    export class ProductService{

        products: FirebaseListObservable<Product[]>;
        user : firebase.User;
        users : Array<any> = [];
        final_data: Array<any> = [];
        uid:string;


        constructor(
            private db: AngularFireDatabase,
            private afAuth: AngularFireAuth
            ) {
                this.afAuth.authState.subscribe(auth => {
                  if (auth !== undefined && auth !== null) {
                    this.user = auth;

                    console.log(this.user.uid);// uid is defined here
                  }
                });

                console.log(this.user.uid);// uid is undefined here


            }





           getProducts(): FirebaseListObservable<Product[]>{



                return this.db.list(`users/${this.user.uid}/products`);
           }
import{Injectable,EventEmitter,Output}来自“@angular/core”;
从“angularfire2/数据库弃用”导入{AngularFireDatabase,FirebaseListObservable};
从“firebase/app”导入*作为firebase;
从'angularfire2/auth'导入{AngularFireAuth};
从“/models/Product.model”导入{Product}”;
从“http”导入{METHODS};
@可注射()
出口类产品服务{
产品:FirebaseListObservable;
用户:firebase.user;
用户:数组=[];
最终_数据:数组=[];
uid:字符串;
建造师(
私有数据库:AngularFireDatabase,
私人afAuth:AngularFireAuth
) {
this.afAuth.authState.subscribe(auth=>{
if(auth!==undefined&&auth!==null){
this.user=auth;
console.log(this.user.uid);//uid在这里定义
}
});
console.log(this.user.uid);//此处未定义uid
}
getProducts():FirebaseListObservable{
返回这个.db.list(`users/${this.user.uid}/products`);
}
以下是我的显示产品的组件:

import { Component, OnInit, Input, AfterViewChecked, OnChanges } from '@angular/core';
import { Product } from '../models/product.model';
import { ProductService } from '../product.service';
import { ShoppingCartService } from './shopping-cart.service';
import { AuthServiceService } from '../auth-service.service';
import { FirebaseListObservable } from 'angularfire2/database-deprecated';
import { AngularFireAuth } from 'angularfire2/auth';

@Component({
  selector: 'app-shopping-cart',
  templateUrl: './shopping-cart.component.html',
  styleUrls: ['./shopping-cart.component.css']
})
export class ShoppingCartComponent implements OnInit, OnChanges {


  products:FirebaseListObservable<Product[]>;
  productsArray : Product[];
  sum:number = 0;

  constructor( private ProdService: ProductService, private afAuth: AngularFireAuth) {


   }

  ngOnInit() {
    this.afAuth.authState.subscribe(
      auth => console.log(auth.uid, " Shopping Cart") // uid is defined
    )


    this.products = this.ProdService.getProducts(); // uid is undefined here






  }
  ngOnChanges(){
    this.products = this.ProdService.getProducts(); // uid is undefined here





  }



}
import{Component,OnInit,Input,AfterViewChecked,OnChanges}来自“@angular/core”;
从“../models/Product.model”导入{Product};
从“../product.service”导入{ProductService};
从“./shoppingcart.service”导入{ShoppingCartService};
从“../auth service.service”导入{AuthServiceService};
从“angularfire2/数据库弃用”导入{FirebaseListObservable};
从'angularfire2/auth'导入{AngularFireAuth};
@组成部分({
选择器:“应用程序购物车”,
templateUrl:“./shopping cart.component.html”,
样式URL:['./shopping cart.component.css']
})
导出类ShoppingCartComponent实现OnInit、OnChanges{
产品:FirebaseListObservable;
productsArray:产品[];
总和:数字=0;
构造函数(私有ProdService:ProductService,私有afAuth:AngularFireAuth){
}
恩戈尼尼特(){
this.afAuth.authState.subscribe(
auth=>console.log(auth.uid,“购物车”)//uid已定义
)
this.products=this.ProdService.getProducts();//此处未定义uid
}
ngOnChanges(){
this.products=this.ProdService.getProducts();//此处未定义uid
}
}

Angular或SPA的问题是,您需要在用户端管理会话。服务器不为您管理会话。您需要将令牌存储到本地存储并定义刷新令牌(即,在firebase令牌过期一段时间后).检查本教程

您是否尝试使用public而不是private afAuth?我没有工作..仍然有相同的问题