通过Angular

时间:2017-03-28 10:24:29

标签: javascript angularjs firebase firebase-realtime-database angularfire

我通过Angular进行后端操作并使用Firebase作为数据库。

一切都很好,而且我创造了一个控制器来创造新的花盆 - 它完美无缺。

但是,在创建新帖子时,它会在firebase中提供一个非常长且随机的ID。

.controller("VideosCtrl", function(firebase, $scope, $firebaseArray) {

 var ref = firebase.database().ref('posts')
 $scope.groups = $firebaseArray(ref);
$scope.addgroup = function() {
$scope.groups.$add({
  title: $scope.newgroupTitle,
  caption: $scope.newgroupCaption,
  creator: $scope.newgroupCreator,
  privacy: $scope.newgroupPrivacy,
  published: $scope.newgroupPublished,

 })

}

我正在使用范围来创建新的底池,但我不想使用随机ID来获得标题

      title: $scope.newgroupTitle,

所以当我创建帖子时,目前我的数据库看起来像:

--mydomain
---- posts
------ RANDOM ID GENERATED
--------title
--------caption
--------creator
--------privacy
--------published
------ RANDOM ID GENERATED
--------title
--------caption
--------creator
--------privacy
--------published
----users

我想改为:

--mydomain
---- posts
------ TITLE ( same as below)
--------title 
--------caption
--------creator
--------privacy
--------published
------ TITLE (same as below)
--------title
--------caption
--------creator
--------privacy
--------published
----users

任何建议都会令人惊叹!

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

在Firebase中使用$ add时,您会自动创建推送ID。如果您想使用自定义ID。相反,您应该使用object.child(id).set(objectInfo);

我已修改了以下代码:

$scope.addgroup = function() {

  $scope.groups.$ref().child($scope.newgroupTitle).set({
    title: $scope.newgroupTitle,
    caption: $scope.newgroupCaption,
    creator: $scope.newgroupCreator,
    privacy: $scope.newgroupPrivacy,
    published: $scope.newgroupPublished
 });
}

这是纯粹的javascript代码,但它应该可以工作,因为angularfire是建立在javascript库之上的。

此处需要注意的一点是,如果要使用自定义键在Firebase中存储对象,最好使用$firebaseObject而不是$firebaseArray

参考:angularfire issue on github.