首页 > 解决方案 > Firestore:snapshotChanges 不是函数

问题描述

在参考这篇文章时,我遇到了一个问题,它说snapshotChanges is not a function

TypeError: db.collection(...).snapshotChanges is not a function
    at new <anonymous> (index.js:139)
    at Object.instantiate (angular.js:5156)
    at angular.js:11719
    at Object.link (angular-route.js:1251)
    at angular.js:1388
    at Ba (angular.js:11266)
    at p (angular.js:10585)
    at g (angular.js:9832)
    at angular.js:9697
    at angular.js:10111 "<ng-view autoscroll="true" class="ng-scope">"

下面是我的代码:(请注意,有或没有pipe()也会遇到同样的错误。)

var db = firebase.firestore();

        $scope.accounts = db.collection("Accounts").snapshotChanges().pipe(map(actions => {
            return actions.map(a => {
                const data = a.payload.doc.data();
                const id = a.payload.doc.id;
                return { id, ...data };
            });
        }));

在我的 SPAindex.html上,我定义了以下引用:

<script defer src="/__/firebase/6.4.1/firebase-app.js"></script>
  <script defer src="/__/firebase/6.4.1/firebase-auth.js"></script>
  <script defer src="/__/firebase/6.4.1/firebase-firestore.js"></script>
  <script defer src="/__/firebase/6.4.1/firebase-messaging.js"></script>
  <script defer src="/__/firebase/6.4.1/firebase-storage.js"></script> -->
  <script defer src="/__/firebase/init.js"></script>

  <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.7.8/angular.min.js"></script>
  <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.7.8/angular-route.min.js"></script>

  <!-- AngularFire -->
  <script src="https://cdn.firebase.com/libs/angularfire/2.3.0/angularfire.min.js"></script>

我可以知道为什么这个错误(snapshotChanges is not a function)仍然出现吗?我需要将它包含doc.id在我的映射结果中,谢谢!

标签: angularjsgoogle-cloud-firestoreangularfire

解决方案


如果您使用纯 JavaScript SDK 来查询 Firestore,并且想要将侦听器附加到 Query,那么您应该使用onSnapshot()

如果您想改用 AngularFire API 并使用snapshotChanges,则需要通过其自己的 API(请参阅链接),这与普通的 JavaScript SDK 不同。


推荐阅读