【问题标题】:Firestore: How to include doc.id in doc.data() while mapping?Firestore:映射时如何在 doc.data() 中包含 doc.id?
【发布时间】:2019-08-29 21:44:27
【问题描述】:

我想将我的数据绑定到下面的 HTML 表格:

<table id="tableAccounts">
        <thead>
            <tr>
                <th>No.</th>
                <th>Status</th>
                <th>Code</th>
                <th>Name</th>
                <th>Deposit / Credit Limit</th>
                <th>Date Joined</th>
                <th>Total Course</th>
                <th>UPV Cost</th>
            </tr>
        </thead>
        <tbody>
            <tr ng-repeat="account in accounts">
                <td>{{ $index + 1 }}</td>
                <td>{{ account.AccStatus }}</td>
                <td>{{ account.id }}</td>
                <td>{{ account.AccName }}</td>
                <td>{{ account.Deposit }}</td>
                <td>{{ account.DateJoined }}</td>
                <td>{{ account.TotalCourse }}</td>
                <td>{{ account.UpvCost }}</td>
            </tr>
        </tbody>
    </table>

所以我的 AngularJS 控制器中有以下代码:

var db = firebase.firestore();

        db.collection("Accounts").get().then((querySnapshot) => {
            if (!querySnapshot.empty) {
                $scope.accounts = querySnapshot.docs.map(doc => doc.data());
                $scope.$apply();
            }
        });

但上面的代码在执行映射时不包括doc.data() 中的doc.id。如何在这种情况下包含 doc.id 以便它可以绑定到我的 HTML 表的 Code 列?

【问题讨论】:

    标签: angularjs google-cloud-firestore


    【解决方案1】:

    要获得doc.id,您必须在代码中使用snapshotChanges(),如下所示:

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

    【讨论】:

    • 这 3 个点 (...data) 也是编码语法的一部分吗?
    • 是的。通过三个点,您可以清楚地返回一个新的数据对象作为您使用“const data”声明的对象
    • 那么以后如何将返回的数据分配给我的$scope.accounts?我可以做类似$scope.accounts = db.collection("Accounts").snapshotChanges().map(actions =&gt; {... 的事情吗?
    • 我编辑了我的帖子。您的Accounts 模型确实有一个id 字段,对吗?所以我删除了as Account。这样,您应该能够分配给您的Accounts 列表。
    • 是的,谢谢,但是评论中的另一个问题呢?如何将返回的数据分配给我的$scope.accounts
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-04
    • 1970-01-01
    • 2014-04-16
    • 1970-01-01
    • 2021-01-19
    • 2012-07-26
    • 1970-01-01
    相关资源
    最近更新 更多