Ошибка типа: undefined не является функцией с Firebase и AngularJS (учебное пособие ThinksterIO, глава 7)
Учебник обновлен, и вопрос устарел
Я столкнулся с множеством проблем, связанных с Thinkster.io AngularJS Tutorial: научиться создавать современные веб-приложенияГлава 7. Создание собственных пользовательских данных с использованием Firebase.
Первое было связано с сохранением нового пользователя в Firebase Forge, что, к счастью, было решено Анной Смотер в ее SO сообщенииAngularJS учебник Thinkster.io глава 7 но теперь я получаю два TypeErrors после регистрации нового пользователя. Я объясню, что происходит, когда я регистрирую нового пользователя:
Я заполняю регистрационную формуЯ нажимаю РегистрацияЯ вижу, что мой новый объект пользователя зарегистрирован в консолиЯ залогинен2TypeError: undefined is not a function
ошибки появляются в консоли1-я ошибка типа: undefined не является функциейИтак, глядя на первую ошибку, мы видим 3 места, на которые указывают моиuser.js
TypeError: undefined is not a function
at Object.User.findByUsername (http://localhost:9000/scripts/services/user.js:37:18)
at setCurrentUser (http://localhost:9000/scripts/services/user.js:8:33)
at http://localhost:9000/scripts/services/user.js:32:5
Первое место в моем коде, на которое указывает первая ошибка, это строка 37, столбец 18, который является началом $ childin the
функция findByUsername`
findByUsername: function (username) {
if (username) {
return users.$child(username);
}
},
Оттуда он указывает на строку 8, столбец 33, который является началомfindByUsername
вызов метода
function setCurrentUser(username) {
$rootScope.currentUser = User.findByUsername(username);
}
И, наконец, он указывает на строку 32, столбец 5, который является началомsetCurrentUser
вызов метода
users.$save().then(function() {
setCurrentUser(username);
});
2-я ошибка типа: undefined не является функциейВторая ошибка TypeError указывает только на одно место вuser.js
TypeError: undefined is not a function
at http://localhost:9000/scripts/services/user.js:14:9
это строка 14, столбец 9 в начале$on
вызов метода
query.$on('loaded', function () {
setCurrentUser(query.$getIndex()[0]);
});
Любые идеи о том, почему я получаю эти два TypeErrors?
FILESuser.js оказание услуг
'use strict';
app.factory('User', function ($firebase, FIREBASE_URL, $rootScope) {
var ref = new Firebase(FIREBASE_URL + 'users');
var users = $firebase(ref).$asObject();
function setCurrentUser(username) {
$rootScope.currentUser = User.findByUsername(username);
}
$rootScope.$on('$firebaseSimpleLogin:login', function (e, authUser) {
var query = $firebase(ref.startAt(authUser.uid).endAt(authUser.uid));
query.$on('loaded', function () {
setCurrentUser(query.$getIndex()[0]);
});
});
$rootScope.$on('$firebaseSimpleLogin:logout', function() {
delete $rootScope.currentUser;
});
var User = {
create: function (authUser, username) {
users[username] = {
/*jshint camelcase: false */
md5_hash: authUser.md5_hash,
username: username,
$priority: authUser.uid
};
users.$save().then(function() {
setCurrentUser(username);
});
},
findByUsername: function (username) {
if (username) {
return users.$child(username);
}
},
getCurrent: function () {
return $rootScope.currentUser;
},
signedIn: function () {
return $rootScope.currentUser !== undefined;
}
};
return User;
});
auth.js контроллер
'use strict';
app.controller('AuthCtrl',
function ($scope, $location, Auth, User) {
if (Auth.signedIn()) {
$location.path('/');
}
$scope.$on('firebaseSimpleLogin:login', function() {
$location.path('/');
});
$scope.login = function() {
Auth.login($scope.user).then(function() {
$location.path('/');
}, function(error) {
$scope.error = error.toString();
});
};
$scope.register = function () {
Auth.register($scope.user).then(function (authUser) {
User.create(authUser, $scope.user.username);
$location.path('/');
Auth.login($scope.user);
console.log(authUser);
}, function(error) {
$scope.error = error.toString();
});
};
});