我现在已经玩过这个了,但是无法理解它:
(使用角度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创建的自定义字母数字不能.
我希望这听起来不太神秘.想做一个小提琴,但是让我们希望它是一些'陷阱'我忽略了并且很容易解决.如果不是,我会尝试修补一个.
谢谢!
根据文档,$ 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.('change'...)尝试类似的方法.
希望有所帮助