【发布时间】:2016-12-22 03:22:04
【问题描述】:
我根据用户是否登录或退出来隐藏和显示导航栏元素。
在主控制器中:
$scope.FBlogin = function(){
FB.login(function(response) {
if (response.authResponse) {
console.log('Welcome! Fetching your information.... ');
FB.api('/me', function(response) {
console.log('Good to see you, ' + response.name + '.');
$cookies.put('userObj', response);
var accessToken = FB.getAuthResponse().accessToken;
console.log(accessToken);
authFact.setAccessToken(accessToken);
console.log(response);
$scope.out=true;
$scope.in = false;
$scope.feed = true;
$location.path("/myFeed");
$scope.$apply();
});
} else {
console.log('User cancelled login or did not fully authorize.');
}
});
};
$scope.FBlogout = function(){
$scope.out = false;
$scope.in = true;
$scope.feed = false;
$cookies.remove("userObj");
$cookies.remove('accessToken');
$location.path("/");
$scope.$apply();
};
}]);
当从列表项调用登录函数时,它在这里起作用。登录链接消失,退出链接显示。
导航指令(主控制器的一部分)
<li ng-click="FBlogin()" ng-if="in"><a href="#login">Login</a></li>
<li ng-if="feed"><a href="#myFeed">My Feed</a></li>
<li id="logout" ng-click="FBlogout()" ng-if="out"><a>Logout</a></li>
angular.module('dsnApp')
.directive('navApp', function(){
return{
templateUrl: 'templates/nav.html',
controller:'mainController',
replace: 'true'
}
});
但是当这个按钮调用登录功能时,登录按钮并没有消失,也没有显示注销。
登录指令(主控制器的一部分)
<div class="fbLogin" ng-controller="mainController">
<h1 style="display: inline-block">Login with <span id="facebook">facebook</span></h1><br>
<button ng-click="FBlogin()">Login</button>
</div>
app.config(function($routeProvider) {
$routeProvider
// route for the home page
.when('/', {
templateUrl : 'templates/home.html',
controller : 'mainController'
})
// route for the about page
.when('/explore', {
templateUrl : 'templates/explore.html',
controller : 'exploreController'
})
// route for the service page
.when('/login', {
templateUrl : 'templates/login.html',
controller : 'mainController'
})
// route for the about page
.when('/myFeed', {
templateUrl : 'templates/myFeed.html',
controller : 'feedController',
authenticated : true
})
.otherwise('/', {
templateUrl : 'templates/home.html',
controller : 'mainController'
});
});
这是否与范围有关?
【问题讨论】:
-
div
<div class="fbLogin" ng-controller="mainController">似乎没有login和logout链接。你有一个单独的 div 和导航指令的单独控制器实例吗? -
你使用指令吗?我的意思是这样的:
app.directive('loginDirective')? -
您可以使用 $rootScope.in 和 $rootScope.out。
-
@ManojLodhi:当然可以,但正如 Angular 常见问题解答所述(docs.angularjs.org/misc/faq)“当然,全局状态很糟糕,您应该谨慎使用
$rootScope” -
来自docs.angularjs.org/misc/faq "如果你想在 $rootScope 上放置一个函数,最好把它放在一个可以在需要的地方注入的服务中,并且更容易测试。相反地,不要创建一个生活中唯一目的是存储和返回数据位的服务。”
标签: javascript html angularjs