使用过滤器映射两个json数组

时间:2016-12-13 16:09:35

标签: javascript angularjs json angularjs-filter

我正在使用AngularJS开发一个论坛,并将MySQL与WS API连接起来。我的想法是,当我用户回复时,我应该得到回复和他/她的名字。

App View

这是我的DB MER

MER DB Model

如您所见,

  • 一个主题(主题)可以多个respuesta (回复)。
  • 一个人(用户)可以许多respuesta (回复)以及许多专家(主题)。

现在,在论坛控制器中,我得到了$http两个回复:

  • url2 - >通过 id (来自$routeParams)= id_tema (在数据库上)获取主题过滤的回复
  • url3 - >一般情况下获取用户,并应在forum.html中进行过滤,以获取正在复制该主题的用户的名称。

论坛-controller.js

angular.module('rhoAppApp')
  .controller('temaCtrl', function ($routeParams, $scope, $http) {


    var id = $routeParams.id;

    var url = 'http://server/api.php/tema?filter=id,eq,' + id;

                 $http.get(url).then(function (response) {

                    $scope.titulo = response.data.tema.records[0][1];
                    $scope.texto = response.data.tema.records[0][2];

                })

    var url2 = 'http://server/api.php/respuesta?filter=id_tema,eq,' + id;

                 $http.get(url2).then(function (response) {

                    $scope.respuestas = response.data.respuesta.records;

                })

    var url3 = 'http://server/api.php/persona'

                 $http.get(url3).then(function (response) {

                    $scope.personas = response.data.persona.records;

                })    

  });

现在,我正在尝试使用过滤器将url2映射到url3

persona[0](用户ID)应该等于respuesta[3],两个用户名persona[3]

所以我跟着下一个问题Map two Collections (Inner Join),我在HTML中做了类似的事情:

<table class="table">
            <tbody> 
                <tr><th>{{titulo}}</a></th></tr>
                <tr><td>{{texto}}</td></tr>
                <tr ng-repeat="respuesta in respuestas | orderBy : 'respuesta[0]'" id="{{respuesta[0]}} " ><td>
                Por  <span ng-repeat="persona in personas | filter:{persona[0]:respuesta[3]}"> {{persona[3]}} </span>, el {{respuesta[2] | badDateToISO | date:'shortDate'}} a las {{respuesta[2] | badDateToISO | date: "HH:mm"}} Hrs.
                <br>
                <br>
                {{respuesta[1]}}
                </td></tr>
                <tr><td>
                <form >
                <textarea class="form-control" rows="5" required></textarea>
                <br>
                <button type="button" class="width-35 center-block btn btn-sm btn-primary" ng-click="urlbtn()"> 
                Responder
                </button>
                </form>
                </td></tr>
            </tbody>
        </table>

我的问题是这个表达式filter:{persona[0]:respuesta[3]},似乎AngularJS在同一个过滤器上不接受2个数组表达式。另外,我使用了'persona[0]:respuesta[3]',但没有用。

我使用此filter:{persona[0]:respuesta[3]}

收到此错误
angular.js:14110 Error: [$parse:syntax] Syntax Error: Token '[' is unexpected, expecting [}] at column 27 of the expression [personas | filter:{persona[0]:respuesta[3]}] starting at [[0]:respuesta[3]}].

另一方面,我没有收到错误,但我也没有得到用户名。

1 个答案:

答案 0 :(得分:0)

经过一些研究后,我发现了map array to another array

我将library(ggplot2) ggplot(df, aes(x = SizeOfTumor, fill = RemovalSurgery)) + geom_bar(position = "fill") + facet_grid(~Age) 替换为filter

ng-if