使用带有angularFire的ng-grid - 键命名问题

时间:2013-12-03 06:40:07

标签: angularjs firebase angular-ui ng-grid angularfire

我现在已经玩过这个了,但是我无法理解它:

(使用角度1.2.2,angularFire 0.5.0和最新的ng-grid)

所以我有一个firebase,我正在使用angularFire将我的数据提取到像这样的ng-grid组件中:

//First I go get my data, in this case something called 'grades' from ..../db/grades
    var promise = angularFire(new Firebase($scope.fireBaseUrl), $scope, 'grades');
//When they're fetched I start up a watcher
    promise.then(function(grades) {
    startWatchGrade($scope, filterFilter, appSettings);
});

//Then I bind that grades as a datasource to my ng-grid
$scope.gridOptions = { 
data: 'grades',
enableCellSelection: false,
enableRowSelection: true,
etc....,

效果很好,我已经完成了将新项目添加到“成绩”(推送)和删除项目(拼接)的控件,所有内容都很好地反映到ng-grid。像这样:

//Adding new like this is ok
$scope.grades.push({some-new-data-here});

//Deleting old like this is ok
$scope.grades.splice(row.rowIndex, 1);

但是这种方法会自动生成基于int的火钥匙,这些火钥匙在修改时会一直变化,所以我想控制钥匙,所以我改变了添加要使用的项目:

var fbRef = new Firebase($scope.fireBaseUrl);
var newRef = fbRef.push({some-items-here});

一切正常,可以使用我的非整数ID将数据存储到firebase中,但它不再绑定到ng-grid。将“成绩”转储到控制台中会显示返回的所有行,但它不会显示在ng-grid中。

简而言之:angularFire生成的基于整数的索引在ng-grid中工作正常,firebase.push创建的自定义字母数字不会。

我希望这听起来不太神秘。想做一个小提琴,但是让我们希望它是一些'陷阱'我忽略了并且很容易解决。如果不是,我会尝试修补一个。

谢谢!

1 个答案:

答案 0 :(得分:5)

根据documentation,$ firebase总是返回对象,而不是数组,这些对于ng-grid不能很好地工作。在这种情况下,angularfire提供了一个过滤器来帮助orderByPriority。确保将$ filter注入控制器。

注意:我没有使用promises或者观察者,只使用带有angularfire的内置事件

$scope.grades = $firebase(new Firebase($scope.fireBaseUrl));
$scope.gradesData=[];
$scope.gridOptions = { data: 'gradesData'}
$scope.grades.$on("loaded", function(data) {
    var arrData = $filter("orderByPriority")(data);
    $scope.$apply(function(){$scope.gradesData = arrData;});
});

您可以尝试使用类似的方法为$ on。('更改'...)新行。

希望有所帮助