Firebase child_added 和 ng-repeat

Firebase child_added and ng-repeat

我使用 child_added 和 ng-repeat 来显示状态列表,这部分工作正常,但是当我点击列表中的一个状态时,我被发送到 tab/statuses/而不是转到 tab/statuses/:statusid。任何帮助将不胜感激。

app.js

.state('tab.statuses', {
    url: "/statuses",
    views: {
        'tab-statuses': {
            templateUrl: "templates/statuses.html",
            controller: "StatusesController"
        }
    }
})
.state('tab.status', {
    url: "/statuses/:statusid",
    views: {
        'tab-statuses': {
            templateUrl: "templates/status.html",
            controller: 'StatusController'
        }
    }
})

状态控制器

app.controller('StatusesController', function ($scope, $filter, $state, $ionicListDelegate, $ionicActionSheet, StatusesService) {


$scope.statuses = [];

var ref = new Firebase("https://app85.firebaseio.com/statuses");

ref.on("child_added", function(snapshot, prevChildKey) {
var status = snapshot.val();
$scope.statuses.push(status);
});

})

statuses.html

<ion-item ng-repeat="status in statuses" href="#/tab/statuses/{{status.$id}}" class="customItemSize mlSmallerFont item-icon-left item-icon-right">
            <i class="icon ion-ios-person-outline"></i>
            {{ status.update }}
</ion-item>

您似乎是从 AngularFire 借鉴了一些想法,但没有实现它们的代码。因为它目前是 HTML 中的 {{status.$id}} 没有价值。

要解决这个问题,您应该使用 AngularFire 或在控制器中填充 $id

ref.on("child_added", function(snapshot, prevChildKey) {
    var status = snapshot.val();
    status['$id'] = snapshot.key();
    $scope.statuses.push(status);
});

请注意,这仅在 snapshot.val() 是一个对象时有效(因此当它是原始对象时无效)。但由于您的代码段就是这种情况,所以这应该有效。