我一直在使用一个Webapp,它将显示论坛主题。没问题,我无法在每个主题回复中都显示用户名。

这是我的MER

javascript - AngularJS和关系数据库-LMLPHP

现在,其中的重要部分是角色(用户)与通过id_persona的响应(回复)相关。

我正在尝试获取用户信息,例如(角色数据库中的名称,姓氏),所以我已经使用了一些解决方案。

这是我的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)
            }


谢谢你的帮助!

最佳答案

发生这种情况是由于angularJs提供了双向绑定。这样会使您的情况复杂化。

在开发模式下进行案例分析。
对于angularjs中的双向绑定变量,它会变10次以确保该变量保留相同的值。这就是观察者的意思。它可以确保如果由于两种方式的数据绑定而导致某些事情的更改不是太频繁,它将进入无限循环,从而更新视图和js对象。似乎由于某种原因,它认为您的用户值可以更改(不确定原因),可能是对角色的获取请求可以给出随机的不同值。

我建议您使用第二种方法。同样,出于相同的原因,它可能会在控制台中打印两次,但是如果在视图中使用它,它应该可以正常工作。

一般来说,我也可以与angularjs一起使用,我认为您应该在更新视图之前将对象获取到js 1st

关于javascript - AngularJS和关系数据库,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43550087/

10-09 05:14