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 здесь. Заранее благодарим за помощь!
почему вы используете 'Var пользователей = sessionData.users;' она должна быть $ scope.users? –
ya vanilla JS-объект «пользователи-пользователи» - это не путь. Держите его в области, как говорит панкадж. после этого вам не придется пользоваться часами. – vidalsasoon
Я должен, вероятно, переименовать свои переменные. В основном каждая страница может содержать до 10 активных пользователей. пользователи var содержат активные, которые я нажимаю в $ scope.users вместе с вакантными пространствами – alex436