Javascript 使用Angular和Codeigniter根据会话值更改菜单

Javascript 使用Angular和Codeigniter根据会话值更改菜单,javascript,php,angularjs,codeigniter,session,Javascript,Php,Angularjs,Codeigniter,Session,我不想根据codeigniter中的会话状态动态显示菜单项。让我用下面的解释向您展示我的代码 这是我的index.html文件 <li><p ng-bind-html="link1" ></p></li> <li><p ng-bind-html="link2" ></p></li> Api/server/Api/user

我不想根据codeigniter中的会话状态动态显示菜单项。让我用下面的解释向您展示我的代码

这是我的index.html文件

                    <li><p ng-bind-html="link1" ></p></li>
                    <li><p ng-bind-html="link2" ></p></li>
Api
/server/Api/users/isLoggedIn
返回

{"success":true,"logged_in":true} 

所以我的问题是,当用户登录或注销时,
  • 项不会改变。我必须按f5刷新网页。
    如果您需要任何其他信息,请让我知道,我会提供


    提前感谢您。

    您可以使用

    $rootScope.$emit("authenticationChanged")
    
    当用户登录和注销,然后在控制器中运行时,在会话工厂上

    函数checkiLogged(){
    var loggedIn=data.logged\u in;
    如果(loggedIn==true){
    $scope.link1=$sce.trustAsHtml(“”);
    $scope.link2=$sce.trustAsHtml(“”);
    $scope.link2=$sce.trustAsHtml(“”);
    }
    }
    checkiLogged()//第一次加载页面时运行
    $rootScope.$on(“authenticationChanged”,函数(){
    CheckiLogged();//身份验证更改时运行
    
    });您可以尝试使用函数获取链接内容:

    <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);
    });
    
  • $scope.getLink1Content=函数(loggedIn){ var linkContent=loggedIn?“”:“”; 返回链接内容; }; $scope.getLink2Content=函数(loggedIn){ var linkContent=loggedIn''; 返回链接内容; } sessionFactory.isLoggedIn().then(函数(数据){ var loggedIn=data.logged\u in; $scope.getLink1Content(loggedIn); $scope.getLink2Content(loggedIn); });
    不插入html,为什么不在默认情况下将所有链接都放在那里,并在会话中设置一个布尔值,使用内置的angulars dirctives进行
    ng show
    显示,只有在有真实值时才显示。你能提供JSFIDLE/plunker吗?@JoeLloyd是的,我将其更改回来,我在想也许这就是问题所在。不要用
    $rootScope
    来做这类事情。全局变量有一个时间和一个地点,但这不是一个时间和地点,它不是一个全局变量。这是一项全球性的活动。。它需要在从服务到控制器的整个应用程序中启动。我尝试过,但没有帮助。可能是因为我要去noobish了解代码。我会继续尝试你有错误吗?日志?你能给我看看吗?很高兴为您服务也许您可以发布代码,这样我就可以看一看了?当然,如果你想找男人的话,我有情人背上的问题。4.等我好起来的时候,我会重新尝试一切的。。
    {"success":true,"logged_in":false} 
    
    $rootScope.$emit("authenticationChanged")
    
    <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);
    });