【问题标题】:AngularFire: run method when $firebaseArray changesAngularFire:$firebaseArray 更改时的运行方法
【发布时间】:2015-11-26 13:46:56
【问题描述】:

我有以下设置:

var x = $firebaseArray(ref);
x.$loaded().then(function () {

    self.y = //I change y based on x

}

根据文档$loaded 只运行一次,但我需要在每次x 更新时更改self.y。我知道我可以扩展$firebaseArray,但在我的情况下这不是一个选项,因为self.y 也可以依赖于另一个$firebaseArray

所以我的问题是: 有没有办法在每次$firebaseArray 更新时运行一个方法,即使在一般情况下 在 JavaScript 中是否有办法观察变量的变化并运行每次执行一个方法。

【问题讨论】:

    标签: javascript angularjs firebase


    【解决方案1】:

    如果您想在数据发生变化时对其执行一些操作,$loaded() 是错误的方法。相反,您需要 extend $firebaseArray 并覆盖 $$added$$changed... 方法。见this fiddle for an example of extending a $firebaseObject,类似。

    但是,如果您没有将 $firebaseArray() 绑定到范围,您不妨使用常规的 Firebase JavaScript SDK 并使用 on('value'

    ref.on('value', function(snapshot) {
        self.y = // change y based on snapshot.val()
    });
    

    AngularFire 是一个很棒的库,用于将 Firebase 数据绑定到 AngularJS 视图。它不能替代 Firebase JavaScript SDK。事实上,它是建立在 Firebase JavaScript SDK 之上的,并且两者完美地互操作。因此,请使用 AngularFire 将数据绑定到视图(如果您需要自定义数据,请扩展 $firebaseArray),但是将 Firebase JavaScript SDK 用于未绑定到视图的数据。

    【讨论】:

      【解决方案2】:

      如果您使用的是 AngularJS,那么您可以使用$watchRead More Here

      你可以这样做

        $scope.$watch('$firebaseArray', function(newV, oldV) {
               // Run whatever method you want
            }, true);
      

      【讨论】:

      • 是的,但除非我遗漏了仅适用于范围变量的内容。在这种情况下,x 是一个局部变量。
      • AngularFire 不需要监视,因为您可以从服务器接收更新并根据这些更改采取行动。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-08
      • 2023-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      相关资源
      最近更新 更多