首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更新所有用户firebase angular的特定字段

问更新所有用户firebase angular的特定字段
EN

Stack Overflow用户
提问于 2021-10-13 01:32:26
回答 1查看 34关注 0票数 1

因为我是angular和Ionic的新手,所以我正在尝试更新用户的特定领域。我想要显示来自firebase的所有数据,并且只更新一个字段。我只能为登录的一个用户做,但不能为所有用户做。

代码语言:javascript
复制
export class AdminPage implements OnInit {
user:any;
userId:string;
enableAccess:boolean;
  constructor(
    private auth:AuthService, 
    private router:Router, 
    private afs:AngularFirestore,
    private loadingCtrl:LoadingController,
    private toastr:ToastController) { }

  ngOnInit() {
    this.auth.getAllUser().subscribe(user=>{
      this.user=user;
    })
    this.auth.user$.subscribe(user=>{
      this.enableAccess=user.IsApproved;
    })
    
  }
  async updateUserInfo(){
    const loading=await this.loadingCtrl.create({
      message:'updating',
      spinner:'crescent',
      showBackdrop:true
    })
    loading.present()
    this.afs.collection('user').doc(this.userId).set({
      'IsApproved':this.user.enableAccess
    },{merge:true}).then(()=>{
      this.toast('update sucessful','success');
    }).catch(error=>{
      loading.dismiss();
      this.toast(error.message,'danger');
    })
  }
  async toast(message,status){
    const toast =await this.toastr.create({
      message:message,
      color: status,
      position: 'top',
      duration:2000
    });
  }
}

组件

代码语言:javascript
复制
ion-content>
  <ion-card>
      <ion-item> 
        <ion-label position="floating">Email:</ion-label>
        <p></p>
      </ion-item>

      <ion-item>
        <ion-label position="floating">Enable Access:</ion-label>
        <ion-input
          required
          type="boolean"
          [(ngModel)]="enableAccess"
          name="enableAccess"
        ></ion-input>
      </ion-item>
      <ion-button
        type="submit"
        expand="block"
        shape="round"
        (click)="updateUserInfo()"
        >Update</ion-button
      >

  </ion-card>
</ion-content>

我想要显示数据库中的每个用户的电子邮件,我想让管理员只更新enableAccess字段。如何获取所有用户并更新字段?

EN

回答 1

Stack Overflow用户

发布于 2021-10-13 02:28:27

这听起来像是您正在尝试为现有用户回填一些数据。如果是这样的话,我建议使用一次性的node.js脚本,而不是在客户端应用程序代码中。

在node.js中,这将如下所示:

代码语言:javascript
复制
const admin = require("firebase-admin");
admin.initializeApp(...);

const db = admin.firestore();
db.collection("user").get((snapshot) => {
  snapshot.forEach((doc) => {
    doc.ref.update({ IsApproved: false });
  });
});

如果您坚持在客户端代码中执行此操作,则几乎是相同的。考虑到这不会立即影响UI,我建议通过常规的SDK在JavaScript中进行回填。

即使结果显示在JavaScript UI中,AngularFire也是建立在Angular SDK之上的,因此它们可以完美地互操作。这意味着,即使你通过(更简单的) JavaScript软件开发工具包进行更新,更新也会立即显示在AngularFire中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69548717

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档