将 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/'))
我在将一些代码从旧的 (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/'))