$rootScope 不工作 - 值不出现在视图中
$rootScope not working - value not appearing in view
我正在关注 Lynda.com 使用 angularjs 构建数据驱动的应用程序。
authentication.js
已经 $rootScope.currentUser
分配了来自 Firebase 的用户值,在 index.html
中应该显示 {{currentUser.firstname}}
。用户已登录且 Firebase 中的值正确,但页面上没有显示任何内容。
authentication.js
myApp.factory('Authentication', function($firebase,
$firebaseAuth, $routeParams, $rootScope, $location, FIREBASE_URL) {
var ref = new Firebase(FIREBASE_URL);
var auth = $firebaseAuth(ref);
auth.$onAuth(function(authUser){
if(authUser) {
var user = new Firebase(FIREBASE_URL + '/users/' + authUser.uid);
$rootScope.currentUser = user;
console.log("logged in as:", authUser.uid);
//console.log($scope.currentUser);
}else{
console.log("logged out");
$rootScope.currentUser = '';
}
});
//Temporary object
var myObject = {
login: function(user) {
return auth.$authWithPassword({
email: user.email,
password: user.password
}); //authWithPassword
}, //login
register: function(user) {
return auth.$createUser({
email: user.email,
password: user.password
}).then(function(regUser) {
var ref = new Firebase(FIREBASE_URL+'users');
var firebaseUsers = $firebase(ref);
var userInfo = {
date : Firebase.ServerValue.TIMESTAMP,
regUser : regUser.uid,
firstname: user.firstname,
lastname : user.lastname,
email: user.email
}; //user info
firebaseUsers.child(regUser.uid).set(userInfo);
}); //promise
} //register
}; //myObject
return myObject;
}); //myApp Factory
index.html
<!doctype html>
<html lang="en" ng-app="myApp">
<head>
<meta charset="UTF-8">
<title>Angular Data</title>
<meta name="viewport" content="width=device-width, user-scalable=no">
<link rel="stylesheet" href="css/style.css">
<script src="js/lib/angular/angular.min.js"></script>
<script src="js/lib/angular/angular-animate.min.js"></script>
<script src="js/lib/angular/angular-route.min.js"></script>
<script src="https://cdn.firebase.com/js/client/2.2.2/firebase.js"></script>
<script src="https://cdn.firebase.com/libs/angularfire/1.0.0/angularfire.min.js"></script>
<script src="js/app.js"></script>
<script src="js/controllers/meetings.js"></script>
<script src="js/controllers/registration.js"></script>
<script src="js/services/authentication.js"></script>
</head>
<body>
<header>
<nav class="cf" ng-include="'views/nav.html'">
</nav>
</header>
<div class="page">
<div class="userinfo" ng-show="currentUser">
<span class="userinfo">Hi {{ currentUser.firstname }}</span>
</div>
<main class="cf" ng-view>
</main>
</div>
</body>
</html>
感谢您的帮助。
已编辑。
@斯科特塞尔比。感谢您的建议,但我仍然没有在视图中看到名字。
使 $rootScope.currentUser = authUser
我可以 console.log($rootScope.currentUser);
作为:
Object {provider: "password", uid: "simplelogin:11", token: "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ2IjowLCJkI…wNDZ9.6eMzLZAVhOFuU8U-gl4MlsoUSrbs5FvlzGqFu-Go4S4", password: Object, auth: Object…}
尽管 Firebase 有用户/
simplelogin:11
date:
email:
firstname:
lastname:
regUser:
我只能从 authUser 和 currentUser 访问 uid。
所以我可以将 currentUser.uid 传递给视图而不是 currentUser.firstname
天哪!我是不是脑残了!我丢失了 $firebaseObject,如下所示:
if(authUser) {
var ref = new Firebase(FIREBASE_URL + '/users/' + authUser.uid);
var user = $firebaseObject(ref);
$rootScope.currentUser = user;
}else{
$rootScope.currentUser = '';
}
作为 Firebase 的新手,发现他们最近用重命名的 $firebaseObject 服务替换了 $asObject() 。我删除了 $asObject 而没有替换 $firebaseObject。
所以现在它起作用了,我很高兴。
我正在关注 Lynda.com 使用 angularjs 构建数据驱动的应用程序。
authentication.js
已经 $rootScope.currentUser
分配了来自 Firebase 的用户值,在 index.html
中应该显示 {{currentUser.firstname}}
。用户已登录且 Firebase 中的值正确,但页面上没有显示任何内容。
authentication.js
myApp.factory('Authentication', function($firebase,
$firebaseAuth, $routeParams, $rootScope, $location, FIREBASE_URL) {
var ref = new Firebase(FIREBASE_URL);
var auth = $firebaseAuth(ref);
auth.$onAuth(function(authUser){
if(authUser) {
var user = new Firebase(FIREBASE_URL + '/users/' + authUser.uid);
$rootScope.currentUser = user;
console.log("logged in as:", authUser.uid);
//console.log($scope.currentUser);
}else{
console.log("logged out");
$rootScope.currentUser = '';
}
});
//Temporary object
var myObject = {
login: function(user) {
return auth.$authWithPassword({
email: user.email,
password: user.password
}); //authWithPassword
}, //login
register: function(user) {
return auth.$createUser({
email: user.email,
password: user.password
}).then(function(regUser) {
var ref = new Firebase(FIREBASE_URL+'users');
var firebaseUsers = $firebase(ref);
var userInfo = {
date : Firebase.ServerValue.TIMESTAMP,
regUser : regUser.uid,
firstname: user.firstname,
lastname : user.lastname,
email: user.email
}; //user info
firebaseUsers.child(regUser.uid).set(userInfo);
}); //promise
} //register
}; //myObject
return myObject;
}); //myApp Factory
index.html
<!doctype html>
<html lang="en" ng-app="myApp">
<head>
<meta charset="UTF-8">
<title>Angular Data</title>
<meta name="viewport" content="width=device-width, user-scalable=no">
<link rel="stylesheet" href="css/style.css">
<script src="js/lib/angular/angular.min.js"></script>
<script src="js/lib/angular/angular-animate.min.js"></script>
<script src="js/lib/angular/angular-route.min.js"></script>
<script src="https://cdn.firebase.com/js/client/2.2.2/firebase.js"></script>
<script src="https://cdn.firebase.com/libs/angularfire/1.0.0/angularfire.min.js"></script>
<script src="js/app.js"></script>
<script src="js/controllers/meetings.js"></script>
<script src="js/controllers/registration.js"></script>
<script src="js/services/authentication.js"></script>
</head>
<body>
<header>
<nav class="cf" ng-include="'views/nav.html'">
</nav>
</header>
<div class="page">
<div class="userinfo" ng-show="currentUser">
<span class="userinfo">Hi {{ currentUser.firstname }}</span>
</div>
<main class="cf" ng-view>
</main>
</div>
</body>
</html>
感谢您的帮助。 已编辑。
@斯科特塞尔比。感谢您的建议,但我仍然没有在视图中看到名字。
使 $rootScope.currentUser = authUser
我可以 console.log($rootScope.currentUser);
作为:
Object {provider: "password", uid: "simplelogin:11", token: "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ2IjowLCJkI…wNDZ9.6eMzLZAVhOFuU8U-gl4MlsoUSrbs5FvlzGqFu-Go4S4", password: Object, auth: Object…}
尽管 Firebase 有用户/
simplelogin:11
date:
email:
firstname:
lastname:
regUser:
我只能从 authUser 和 currentUser 访问 uid。 所以我可以将 currentUser.uid 传递给视图而不是 currentUser.firstname
天哪!我是不是脑残了!我丢失了 $firebaseObject,如下所示:
if(authUser) {
var ref = new Firebase(FIREBASE_URL + '/users/' + authUser.uid);
var user = $firebaseObject(ref);
$rootScope.currentUser = user;
}else{
$rootScope.currentUser = '';
}
作为 Firebase 的新手,发现他们最近用重命名的 $firebaseObject 服务替换了 $asObject() 。我删除了 $asObject 而没有替换 $firebaseObject。 所以现在它起作用了,我很高兴。