如果有人通过thinkster.io augularjs教程熟悉下面的代码。我面临以下错误。
<ul class="nav navbar-nav navbar-right" ng-show="signedIn()">
<li>
<a href="#" ng-click="logout()">Logout</a>
</li>
</ul>
首先没有显示退出按钮。添加单引号后,它出现了
<ul class="nav navbar-nav navbar-right" ng-show="'signedIn()'">
但是当我点击退出时,用户没有被注销。
nav.js代码
app.controller('NavCtrl', function ($scope, $location, Post, Auth) {
$scope.post = {url: 'http://', title: ''};
$scope.submitPost = function () {
Post.create($scope.post).then(function (ref) {
$location.path('/posts/' + ref.name());
$scope.post = {url: 'http://', title: ''};
});
};
$scope.logout = function () {
Auth.logout();
};
});
services / auth.js代码
app.factory('Auth', function($firebaseSimpleLogin, FIREBASE_URL, $rootScope){
var ref = new Firebase(FIREBASE_URL);
var auth = $firebaseSimpleLogin(ref);
var Auth = {
register: function(user){
return auth.$createUser(user.email, user.password);
},
signedIn: function(){
return auth.user !== null;
},
logout: function(){
auth.$logout();
}
};
$rootScope.signedIn = function(){
return Auth.signedIn();
};
return Auth;
});
答案 0 :(得分:3)
由于我自己遇到了这个问题并检查了GitHub问题,所以您需要做什么。
在login
服务上创建Auth
方法,如下所示:
login: function(user) {
return auth.$login('password', user);
}
在您的身份验证控制器中,您需要在注册后登录,如下所示:
Auth.register($scope.user).then(function (authUser) {
Auth.login($scope.user); // user is now logged in
});
由于您的登录方法返回一个承诺,您可以在用户登录时执行任何操作。
答案 1 :(得分:0)
ng-show的内容是根据范围进行评估的表达式。它不应该是单引号,否则你只是给它一个非假或真值(不是undefined,null或0)。由于signedIn是服务的一种方法,因此必须通过控制器作用域公开该方法,或者在处理工作的控制器作用域中创建一个函数。