使用Angular和Codeigniter根据会话值更改菜单
Change menu based on session value with Angular and Codeigniter
我不想在codeigniter中根据会话状态动态显示菜单项。让我向您展示我的代码和以下解释。
这是我的index.html文件
<li><p ng-bind-html="link1" ></p></li>
<li><p ng-bind-html="link2" ></p></li>
链接数据来自这个控制器
sessionFactory.isLoggedIn().then(function(data){
var loggedIn = data.logged_in;
if(loggedIn == true){
$scope.link1 = $sce.trustAsHtml('<a href="#/my_profile">My profile</a>');
$scope.link2 = $sce.trustAsHtml('<a ng-click="logOut()" style='"cursor: pointer;" >Logout</a>');
}else{
$scope.link1 = $sce.trustAsHtml('<a href="#/login">Login</a>');
$scope.link2 = $sce.trustAsHtml('<a href="#/register" >Register</a>');
}
})
这是我的会话工厂
//Factory for Session
app.factory('sessionFactory', ['$http', '$location', function($http, $location){
var factory = {};
factory.logOutUser = function(){
console.log("woot");
return $http({
method: 'POST',
url: $location.protocol() + '://' + $location.host() + '/server/api/users/logout'
}).then(function successCallback(response) {
console.log(response);
},function errorCallback(response) {
console.log('error logging out: ' + response);
});
}
factory.isLoggedIn = function(){
console.log("checking login");
return $http({
method: 'GET',
url: $location.protocol() + '://' + $location.host() + '/server/api/users/isLoggedIn'
}).then(function successCallback(response) {
console.log(response.data);
return response.data;
},function errorCallback(response) {
console.log('Checking login failed: ' + response);
});
}
/*
/server/api/users/logoutfactory.currentUserId = function(){
return $http.get($location.protocol() + '://' + $location.host() + '/server/api/users/userId');
}
*/
return factory;
}]);
Api /server/api/users/isLoggedIn
返回
{"success":true,"logged_in":true}
或
{"success":true,"logged_in":false}
所以我有一个问题,当用户登录或注销时,<li></li>
项目不会改变。我必须按f5刷新网页
如果你需要任何额外的信息,请告诉我,我会提供。
提前谢谢。
您可以使用在$rootScope
上激发事件
$rootScope.$emit("authenticationChanged")
当用户登录和注销时,在您的会话工厂上,然后在控制器中运行
function checkIfLogged() {
var loggedIn = data.logged_in;
if (loggedIn == true) {
$scope.link1 = $sce.trustAsHtml('<a href="#/my_profile">My profile</a>');
$scope.link2 = $sce.trustAsHtml('<a ng-click="logOut()" style='"cursor: pointer;" >Logout</a>');
} else {
$scope.link1 = $sce.trustAsHtml('<a href="#/login">Login</a>');
$scope.link2 = $sce.trustAsHtml('<a href="#/register" >Register</a>');
}
}
checkIfLogged(); //RUN THE FIRST TIME THE PAGE LOADS
$rootScope.$on("authenticationChanged", function(){
checkIfLogged(); //RUN WHEN AUTHENTICATION CHANGE
});
有关事件的更多信息,请查看https://docs.angularjs.org/api/ng/type/$rootScope.Scope
您可以尝试使用以下函数来获取链接内容:
<li><p ng-bind-html="getLink1Content(false)"></p></li>
<li><p ng-bind-html="getLink2Content(false)"></p></li>
$scope.getLink1Content = function (loggedIn) {
var linkContent = loggedIn ? '<a href="#/my_profile">My profile</a>' : '<a href="#/login">Login</a>';
return linkContent;
};
$scope.getLink2Content = function (loggedIn) {
var linkContent = loggedIn '<a ng-click="logOut()" style='"cursor: pointer;" >Logout</a>' : '<a href="#/register" >Register</a>';
return linkContent;
}
sessionFactory.isLoggedIn().then(function(data){
var loggedIn = data.logged_in;
$scope.getLink1Content(loggedIn);
$scope.getLink2Content(loggedIn);
});
相关文章:
- JavaScript下拉菜单-点击按钮并根据所选值重定向到url
- Jquery菜单操作不稳定,定位不正确,存在一般错误
- angular的下拉菜单
- 使用JQuery的动态上下文菜单
- 创建带有和不带有JavaScript的Bootstrap下拉菜单
- 创建下拉菜单
- 下拉菜单在菜单按钮的边缘闪闪发光
- Div根据<选择>菜单
- Flash Uploadify在调用我的MVC控制器时没有保留会话/授权
- I'我设计了一个下拉菜单,onclick会出现,而on blur会消失
- 硒IDE下拉菜单
- 将JavaScript弹出菜单转换为警报框
- 调整屏幕大小后不显示子菜单
- 固定位置菜单时滚动,直到它击中一个相对容器的底部
- 我的下拉菜单中的链接不起作用
- 使用Angular和Codeigniter根据会话值更改菜单
- 如何在单击上下文菜单时设置会话变量
- 在php中处理登录后的会话id,以将菜单栏项从登录更改为注销
- 如何在laravel刀片的会话变量下拉菜单中设置所选选项
- 使用菜单按钮时,记住PHP会话中所有页面的滚动位置