【问题标题】:Accessing Related Object Data in AngularFire for Firebase在 AngularFire for Firebase 中访问相关对象数据
【发布时间】:2017-06-09 23:43:35
【问题描述】:

我想在我的 Firebase 数据中将一个业务与另一个业务相关联,然后使用 AngularFire 对相关业务进行 ng-repeat。我的 Firebase 数据的结构如下:

{
  "businesses" : {
    "-KQ1ggyrnYGYL1084Htz" : {
      "name" : "Some Business",
      "cat" : "Food",
      "related" : {
        "-KQ1hFH0qrvKSrymmn9d" : true,

在我的 JS 中,我有以下工厂和控制器:

app.factory("Businesses", ['$firebaseArray', function ($firebaseArray) {
    var stuff = firebase.database().ref().child("businesses");
    var Businesses = $firebaseArray(stuff);
    return Businesses;
}])

还有我的控制器:

app.controller('businessCtrl', ['$scope','$firebaseArray','Businesses', function ($scope, $firebaseArray, Businesses) {
    $scope.businesses = Businesses;

然后,在 HTML 中,我使用 ng-repeat 循环遍历“相关”业务,如下所示:

<span>Related:</span>

<a ng-repeat="item in businesses.related" ui-sref="shop.item({item: item.link})">
     <div class="chip">
          <img ng-src="{{item.card}}" alt="Contact Person">
               {{item.name}}
     </div>
</a>

但我似乎无法从我的 {{item.name}} 访问任何数据,例如“姓名”。我需要做什么才能访问所引用企业的数据?

【问题讨论】:

    标签: angularjs json firebase firebase-realtime-database


    【解决方案1】:

    如果您想访问数据item.name,请使用item in businesses 而不是item in businesses.related

    使用item in businesses.related 时,您将获得item.-KQ1hFH0qrvKSrymmn9d 的数据

    【讨论】:

    • 我最初使用item in businesses 获取业务。但是后来我想遍历与该业务相关的少数业务,因此我使用了 firebase 对象键来希望引用该业务。如果我再次使用item in businesses,如果我理解正确,我将获得所有企业,而不是我引用的少数企业。
    【解决方案2】:

    好的,所以我后来发现了如何做到这一点。它可能按照我尝试的方式起作用,但这不是推荐的方法。一方面,Firebase 中的非规范化是正常的。意思是,我需要创建一个新对象,而不是将相关业务放在子对象中:

    businesses
        -BusinessKey
    related
        -BusinessKey
            -RelatedBusinessKey
    

    然后像这样获取数据:

    $scope.related = [];
    const businessKey = $scope.finalItem.$id;
    const rootRef = firebase.database().ref();
    const discoverRef = rootRef.child('discover');
    const businessRef = rootRef.child('businesses');
    
    function getRelatedContent(key, cb) {
       relatedRef.child(key).on('child_added', snap => {
           let businesRef = businessRef.child(snap.key);
           businesRef.once('value', cb);
       });
    }
    
    getRelatedContent(businessKey, snap => {
        var snapVal = snap.val();
            $scope.related.push(snapVal);
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多