2016-12-13 4 views
0

Я разрабатываю форум, использующий AngularJS и взаимодействующий с MySQL с WS API. Моя идея - когда пользователь отвечает, я должен получить ответ и его/ее имя.Карта двух json-массивов с использованием фильтров

App View

Это мой DB MER

MER DB Model

Как вы можете видеть,

  • Один Tema (тема) может иметь много respuesta (ответы) ,
  • Один персон (пользователей) могут иметь много respuesta (ответов), а также много Tema (тема).

Теперь в контроллере форума, я получаю с $http два ответов:

  • url2 -> получить ответы на тему фильтрации с идентификатором (от $routeParams) = id_tema (на db)
  • 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; 

       })  

    }); 

Теперь я triying на карту url2 с url3 с помощью фильтров.

persona[0] (идентификатор пользователя) должен быть равен 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]}]. 

другого, я не получаю ошибки, но я не получил имя пользователя.

ответ

0

После еще некоторых исследований, я нашел этот map array to another array

И я заменяю filter для ng-if

<span ng-repeat="persona in personas" ng-if="respuesta[3] === persona[0]" > {{persona[3]}} {{persona[4]}} {{persona[5]}}</span>