【发布时间】:2015-04-13 18:01:27
【问题描述】:
我对 angularJS 很陌生,所以如果我说的完全错误,请原谅我。我正在聊天。我在获取数据后没有更新范围/视图的问题。我有一个变量 $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>
如果我使用 $watch 创建 $scope.users,一切正常。否则,当页面加载时,视图会看到一个空的 $scope.users 所以 ng-repeat 什么都不做。如果我重新加载页面一切正常。我尝试了 $scope.$apply() 但给了我一个错误,说摘要已经被调用。我不明白为什么我需要在这里使用 $watch 。 在此先感谢您的帮助!
【问题讨论】:
-
你为什么使用
var users = sessionData.users;应该是$scope.users? -
ya vanilla JS 对象“var users”不是要走的路。像 pankaj 说的那样保持在范围内。在那之后你不应该使用手表。
-
我可能应该重命名我的变量。基本上每个页面最多可以有 10 个活跃用户。 var users 包含我在 $scope.users 中推送的活动用户以及空白空间
-
@alex436 好的..重命名并更新您的代码..
标签: angularjs scope apply watch