【问题标题】:Can't modify public variable inside value event listener Angular firebase database无法修改值事件侦听器Angular firebase数据库中的公共变量
【发布时间】:2019-12-20 16:28:07
【问题描述】:

我正在尝试在 firebase 的值事件侦听器中设置我在类中声明为 public 的变量。虽然,我收到错误

Uncaught TypeError: Cannot read property 'driverAssigned' of null.

如何在这个 firebase 监听器中设置一个公共变量?

我已经尝试在类中创建一个回调函数来设置我的变量,但错误是一样的。

export class InRideComponent implements OnInit {
    public driverAssigned: boolean;

    constructor(
      private fireb: AngularFireDatabase
    ) {
      const driverRef_str = "/queue/user";
      this.fireb.database.ref(driverRef_str).on('value', function(snapshot) {
        if (snapshot.val() !== null) {
          console.log("A driver has been assigned!");
          this.driverAssigned = true;
        }
      })
    }
}

【问题讨论】:

    标签: javascript angular firebase firebase-realtime-database


    【解决方案1】:

    这更多的是 Javascript/Typescript 上下文问题:

    虽然,我没有检查这个,但你可能想试试下面:

    this.fireb.database.ref(driverRef_str).on('value', function(snapshot) {
            if (snapshot.val() !== null) {
              console.log("A driver has been assigned!");
              this.driverAssigned = true;
            }
          }.bind(this));
    

    如果它不起作用,请告诉我:)

    【讨论】:

    • 由于您使用的是 Angular,我建议您使用 RxJS 和 fromEvent 以保持一致性,并且不要忘记取消订阅。或者在完成后移除监听器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-17
    • 1970-01-01
    • 2020-11-03
    • 1970-01-01
    • 2016-11-23
    • 1970-01-01
    • 2017-09-09
    相关资源
    最近更新 更多