2015-02-12 4 views
1

Im довольно новый для angularJS поэтому, пожалуйста, простите меня, если я скажу что-нибудь совершенно неправильное. Я делаю какую-то чат. У меня возникла проблема с обновлением области видимости/представлением не beign после получения данных. У меня есть переменная $ scope.users, которая представляет собой массив, содержащий информацию о пользователях, и представление делает ng-repeat для пользователей, чтобы отображать их информацию. Данные хранятся с предыдущей страницы и загружаются через хранилище сеансов. Контроллер выглядит следующим образом:

app.controller('table-controller',['$scope','$interval','HttpService','TableModel', 
function($scope,$interval,HttpService,TableModel){ 
    var _this = this; 
    console.log('loading table controller ...'); 


    $scope.users = []; 
    var sessionData = JSON.parse(sessionStorage.getItem('sessionData')); 
    var activeUsers = sessionData.activeUsers; 

    //$scope.users = TableModel.initUsers(); 

    $scope.$watch('users',function(){ 
     for(var i = 0; i < 10; i++){ 
      $scope.users.push({ 
       user : ' ', 
       name : 'Vacant', 
       picture : '../img/sit_default.png', 
       speak_turn : ' ', 
       sit : i, 
       last_request : 0 
      }); 
     } 
     for(var i = 0; i < activeUsers.length; i++){ 
      var sit = activeUsers[i].sit; 
      $scope.users[sit] = activeUsers[i]; 
     } 
    }); 
$scope.className = function(index){ 
     return "sit" + (index + 1); 
    } 

И HTML является:

<ul class="first-place"> 
     <li ng-repeat="user in users track by $index" ng-class="className($index)"> 
      <div class="pro_pic_wrap"> 
      <img ng-src="{{user.picture}}" alt=""> 
      <span>{{$index + 1}}</span> 
      </div> 
      <a href="#">{{user.name}}</a> 
     </li> 
</ul> 

Все работает нормально, если я использую $ смотреть, чтобы создать $ scope.users. В противном случае, когда страница загружает представление, видит пустой объект $ scope.users, поэтому ng-repeat ничего не делает. Если я перезагружаю страницу, все работает нормально. Я попробовал $ scope. $ Apply(), но дает мне ошибку, поскольку дайджест уже вызван. Я не понимаю, почему мне нужно использовать $ watch здесь. Заранее благодарим за помощь!

+0

почему вы используете 'Var пользователей = sessionData.users;' она должна быть $ scope.users? –

+1

ya vanilla JS-объект «пользователи-пользователи» - это не путь. Держите его в области, как говорит панкадж. после этого вам не придется пользоваться часами. – vidalsasoon

+0

Я должен, вероятно, переименовать свои переменные. В основном каждая страница может содержать до 10 активных пользователей. пользователи var содержат активные, которые я нажимаю в $ scope.users вместе с вакантными пространствами – alex436

ответ

0

вы можете создать метод и назовите его вместо $ смотреть

$scope.getUsers= function(){ 
    for(var i = 0; i < 10; i++){ 
      $scope.users.push({ 
       user : ' ', 
       name : 'Vacant', 
       picture : '../img/sit_default.png', 
       speak_turn : ' ', 
       sit : i, 
       last_request : 0 
      }); 
     } 

     for(var x = 0; x < users.length; x++){ 
      var sit = activeUsers[x].sit; 
      $scope.users[sit] = activeUsers[x]; 
     } 
} 
$scope.getUsers(); 
+0

tht does not work – alex436

+0

убедитесь, что u уже потреблял услугу «$ sessionStorage» в вашем контроллере – MAbdulHalim

+0

Я не уверен, что понимаю. sessionStorage - это объект javascript, позволяющий хранить/отбирать связанные с сеансом данные http://www.w3schools.com/html/html5_webstorage.asp – alex436