2015-04-25 43 views
0

我使用的是AngularJS,我需要您的帮助来在用户登录后更新HTML的内容。 事实上,当我加载页面时,HTML只加载控制器一次,用户尚未记录。但登录后HTML不刷新页面,显示用户的登录名?我该如何解决这个问题。 下面是我的HTML绑定不会在angularjs中刷新

<section class="hero hero-1 hero-small" ng-controller="HomeController"> 

    <header class="navbar" role="navigation"> 
     <div class="container" ng-controller="UserController"> 
      {{username}} 
      <nav> 
       <a class="navbar--logo" ui-sref="home">EspritAcademy</a> 
      </nav> 
      <nav> 
       <ul class="navbar--list pull-right"> 
        <li class="navbar--list-item"><a ui-sref="#">Features</a></li> 
        <li class="navbar--list-item"><a ui-sref="#">Courses</a></li> 
        <li class="navbar--list-item" ng-hide="isLoggedIn()"><a 
         ui-sref="login">Sign in</a></li> 

        <li class="navbar--list-item dropdown" 
         ng-controller="DropdownCtrl" dropdown is-open="status.isopen" 
         ng-show="isLoggedIn()"><a ui-sref="#" 
         class="dropdown-toggle" data-toggle="dropdown" dropdown-toggle 
         ng-disabled="disabled"> <b>{{username}}</b><b class="caret"></b> 
        </a> 
         <ul class="dropdown-menu" style="left: inherit; right: 0;"> 
          <li><a ui-sref="#">My Profile</a></li> 
          <li><a ui-sref="#">Account Settings</a></li> 
          <li ng-click="logout()"><a ui-sref="home">Logout</a></li> 
         </ul></li> 
        <!-- <li class="navbar--list-item" ng-click="logout()" 
         ng-show="isLoggedIn()"><a ui-sref="home">Déconnexion</a></li> --> 

        <li class="navbar--list-item" ng-hide="isLoggedIn()"><a 
         class="rounded-button blue-button" ui-sref="register">Start 
          learning</a></li> 
       </ul> 
      </nav> 
     </div> 
    </header> 
</section> 

和我的控制器:

controller(
      "HomeController", 
      function HomeController($scope, sessionService) { 
       $scope.isLoggedIn = sessionService.isLoggedIn; 
       $scope.logout = sessionService.logout; 
      }).controller(
        "UserController", 
        function UserController($scope, accountService) { 
         console.log("Hello"); 
         var loggedUser = {}; 
         loggedUser = accountService.getuser(); 
         if ((loggedUser)) { 
          $scope.username = loggedUser.username; 
          console.log("username : ", $scope.username); 
         } 
        }).controller('DropdownCtrl', 
      function($scope, $log) { 
       $scope.status = { 
        isopen : false 
       }; 

       $scope.toggled = function(open) { 
       }; 
      }); 
,我现在面临

问题是与显示器{{名}}。下面的 是用于使用Java后端的休息技术获取用户详细信息的工厂。

factory(
      'accountService', 
      function($resource, sessionService) { 
       var service = {}; 
       service.register = function(account, profile, success, 
         failure) { 
        if (profile.id == 1) { 
         var Account = $resource("/rest/account"); 
         Account.save({}, account, success, failure); 
        } else { 
         var Account = $resource("/rest/account/teacher"); 
         Account.save({}, account, success, failure); 
        } 
       }; 
       service.userExists = function(account, success, failure) { 
        var Account = $resource("/rest/account"); 
        var data = Account.get({ 
         username : account.username, 
         password : account.password 
        }, function() { 
         console.log("user details : ", data); 
         var accounts = data.username; 
         if (accounts && accounts.length !== 0) { 
          console 
            .log("profile id :", 
              data.userProfile.id); 
          service.data = data; 
          success(account); 
         } else { 
          failure(); 
         } 
        }, failure); 
       }; 
       service.getuser = function() { 
        return service.data; 
       }; 
       return service; 
      }) 

我不需要继续刷新我的页面我只需要在用户登录后才加载UserController。用ng-if或其他方法可以吗?

+0

请出示'accountService.getuser()'代码。你的'如果(loggedUser)'是造成这个问题,但会帮助看到'getuser()'返回什么 – charlietfl

+0

@charlietfl我不认为这个问题可能与accoutService.getuser有关,因为我没有问题显示用户名相同的控制器,但在登录后加载的其他屏幕中。 –

+0

但它当然是当你只设置'$ scope.username'时,如果它没有用'username属性返回一个对象。然后,当你更新'getuser()'中的对象时,没有什么可以绑定到控制器上。 – charlietfl

回答

0

我想你必须实例化用户控制器只有当用户登录,这是目前没有案件。

尝试改变这种

<div class="container" ng-controller="UserController"> 

这个

<div class="container" ng-controller="UserController" ng-if="isLoggedIn()"> 
+0

没错:) CA马尔凯:)临屋你是Haykel,我在控制器中使用了if条件,并且我认为当用户名为空时我不会有问题,但是使用ng-if只有在条件被验证时才会填充该var。我还更新了HTML代码以获得正确的显示:)再次感谢@Haykel Ben Jemia –

0

由于getuser()总是返回一个对象尝试以下

function HomeController($scope, accountService) { 
    //will always be object but may not have `username` property 
    $scope.loggedUser = accountService.getuser(); 
} 

然后在标记使用

{{loggedUser.username}} 

所以,现在当username物业在服务得到更新它会通过被绑定一路到视图

+0

这是相同的问题,我面临的问题是,当我加载页面,并且用户还没有登录,所以loggedUser var将是空的,这意味着{{loggedUser.username}}也将是空的,将不会在用户登录后更新。 –

+0

oops更改此'var service = {data:''};'。我误读了回报 – charlietfl

+0

同样的事情:(它登录后不更新显示。 –