我一直在使用webapp来展示论坛主题。没有我的问题,我无法在每个主题回复中显示用户名。
这是我的MER
现在,重要的部分是角色(用户)通过id_persona与respuestas(回复)相关。
我试图获取用户信息(名称,姓氏,在人物数据库中),所以我使用了一些解决方案。
这里是我的HTML
<h2>{{titulo}}</h2>
<p>{{texto}}</p>
<div class="row">
<div class="container" ng-repeat="respuesta in respuestas">
<!-- solution 1 -->
<span>{{ getPersona(respuesta[3]) }}</span>
<!-- solution 2 -->
<div ng-init="searchUser(respuesta[3])">
<span ng-repeat="user in users" ng-if="respuesta[3] == user[0]">{{user[0]}}</span>
</div>
<p>{{respuesta[1]}}</p>
</div>
</div>
Titulo和texto是我使用$ routeParams获得的tema(主题)的一部分。
ng-repeat 正在收到与此主题相关的每个回复
现在,解决方案1是<span>{{ getPersona(respuesta[3]) }}</span>
我的控制器中有一个函数可以获得respuesta [3](id_persona)。
$scope.getPersona = function(persona) {
var url3 = 'http:/WEBSERVICE/persona?filter=id,eq,' + persona;
$http.get(url3).then( function(response) {
//console.log(response);
var user = response.data.persona.records[0];
console.log(user)
return user;
});
}
这应该返回一个包含用户信息的数组,但我收到错误
10 $digest() iterations reached. Aborting!
Watchers fired in the last 5 iterations: []
net::ERR_INSUFFICIENT_RESOURCES
第二个解决方案是<div ng-init="searchUser(respuesta[3])">
,它还将respuesta [3]发送到函数searchUser。这个解决方案是创建一个数组(用户),其中包含回复该主题的用户的信息,然后使用nf-if过滤respuesta [3] = user.id的那个。
$scope.users = []
$scope.searchUser = function(persona) {
var url3 = 'https://WEBSERVICE/persona?filter=id,eq,' + persona;
$http.get(url3).then( function(response) {
var user = {
id: response.data.persona.records[0][0],
nombres: response.data.persona.records[0][3],
apellidos: response.data.persona.records[0][4] + ' ' + response.data.persona.records[0][5]
};
//console.log(user)
if ($scope.users.indexOf(user) == -1) {
$scope.users.push(user);
console.log($scope.users.indexOf(user));
console.log($scope.users)
}
})
}
这有什么问题?我不是我的用户在数组用户中获得重复,这就是为什么我使用$scope.users.indexOf(user)
我认为解决方案1应该是工作速度更快的工具,但它不起作用,解决方案2工作但是我得到了重复的用户,也试着去做,我没有做过。了解它是如何工作的,我这样做了:
for (var i = 0; i < $scope.users.length; i++) {
if($scope.users[i].id === users.id) {
console.log('ya existe');
} else {
$scope.users.push(user);
}
console.log($scope.users)
}
感谢您的帮助!
答案 0 :(得分:1)
这是因为angularJs提供的双向绑定。这使你的情况变得复杂。
在开发模式中介绍您的案例。 对于angularjs中的双向绑定变量,它会变化10次以确保变量保留相同的值。这就是观察者所暗示的。它确保如果某些事情没有太频繁地改变,否则由于双向数据绑定,它将进入无限循环更新视图和js对象。似乎由于某种原因它认为你的用户价值可以改变(不确定为什么)可能是对角色的获取请求可以给出随机的不同值。
我建议你使用第二种方法。同样,它可能会出于同样的原因在控制台中打印两次,但如果您在视图中使用它,它应该可以正常工作。
一般情况下还使用angularjs我认为你应该在更新视图之前将对象提供给js 1st