将 AngularFire 代码从 0.7.x 重构为 1.0.0

Refactoring AngularFire Code from 0.7.x to 1.0.0

我在将一些代码从旧的 (0.7.1) AngularFire tutorial 重构到最新版本的 AngularFire 时遇到问题。

我意识到很多东西已经被弃用了,比如 $firebase 服务,我们现在使用 $firebaseArray$firebaseObject 来代替它。

我已将所有 $firebase 服务更改为 $firebaseObject,但我在使用代码时仍然遇到一些问题。

我在这一行遇到错误(TypeError: undefined is not a function at Object.getItemsForCurrentUser (main.controller.js:83):

return users.$child(currentUser + '/items/');

我尝试将 $child() 更改为 child(),但没有成功。

任何人都可以帮助解释我做错了什么,或者帮助我指出任何可能让我更好地理解迁移到 AngularFire 1.0.0 的资源吗?我已经看过迁移指南,但我仍然觉得很难理解发生了什么。

感谢任何帮助。提前致谢!

完整代码如下:

.constant('FIREBASE_URI', 'https://fb-relations.firebaseio.com/')

.controller('MainCtrl', ['$scope', 'ItemsService', 'UsersService', function($scope, ItemsService, UsersService) {
  $scope.newItem = { name: '', description: '', count: 0 };
  $scope.currentItem = null;
  $scope.currentUser = null;
  $scope.items = null;

  $scope.users = UsersService.getUsers();

  $scope.$watch('currentUser', function() {
    UsersService.setCurrentUser($scope.currentUser);
    if ($scope.currentUser) {
      $scope.items = UsersService.getItemsForCurrentUser();
    }
  });

}])

.factory('UsersService', ['$firebaseObject', 'FIREBASE_URI', function($firebaseObject, FIREBASE_URI) {
  var usersRef = new Firebase(FIREBASE_URI + 'users');
  var users = $firebaseObject(usersRef);
  var currentUser = null;

  var getUsers = function() {
    return users;
  };

  var getCurrentUser = function() {
    return currentUser;
  };

  var setCurrentUser = function(user) {
    currentUser = user;
  };

  var getItemsForCurrentUser = function() {
    return users.$child(currentUser + '/items/');
  };

  var addItemForCurrentUser = function(itemRef) {
    var child = users.$child(currentUser + '/items/' + itemRef.name());
    child.$set(true);
  };

  var removeItemForCurrentUser = function(itemId) {
    users.$remove(currentUser + '/items/' + itemId);
  };

  return {
    getUsers: getUsers,
    getCurrentUser: getCurrentUser,
    setCurrentUser: setCurrentUser,
    getItemsForCurrentUser: getItemsForCurrentUser,
    addItemForCurrentUser: addItemForCurrentUser,
    removeItemForCurrentUser: removeItemForCurrentUser
  };
}])

文字太多,但如果我理解正确的话,您想知道如何在 AngularFire 1.0 中编写这个 AngularFire 0.7 表达式:

var child = users.$child(currentUser + '/items/' + itemRef.name());

您可以暂时回到常规 Firebase JavaScript SDK 来执行此操作:

var childRef = users.$ref().child(currentUser + '/items/' + itemRef.name());

然后您需要使用以下方法在该 ref 上创建一个 $firebaseObject

var user = $firebaseObject(childRef);

更新

在您的评论中,您要求提供此 AngularFire 0.7 代码段的更新版本:

return users.$child(currentUser + '/items/');

在 AngularFire 1.x 中是:

return $firebaseObject(users.$ref().child(currentUser + '/items/'))