2016-12-13 4 views
0

Ich entwickle ein Forum mit AngularJS und Schnittstellen zu MySQL mit einer WS-API. Meine Idee ist, wenn ich Benutzer antworte, sollte ich die Antwort und seinen/ihren Namen bekommen. Map zwei JSON-Arrays mit Filtern

App View

Das ist mein DB MER

MER DB Model

Wie Sie sehen können,

  • One tema (Thema) kann viele respuesta (Antworten) haben .
  • Eine Persona (Benutzer) können viele respuesta (Antworten) und auch viele tema (Themen).

Nun Im Forum Controller, ich bin mit $http zwei Antworten bekommen:

  • url2 -> erhalten Antworten des Themas Filterung mit id (von $routeParams) = id_tema (auf db)
  • url3 -> Holen Sie sich Benutzer im Allgemeinen, und sollte in forum.html gefiltert werden, um den Namen des Benutzers zu erhalten, der das Thema replying ist.

Forum-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; 

       })  

    }); 

Nun bin ich triying url2 mit url3 mit Filtern abzubilden.

persona[0] (Benutzer-ID) sollte gleich sein respuesta[3], in der Reihenfolge zwei erhalten Benutzername persona[3].

Also folgte ich die nächste Frage Map two Collections (Inner Join) und ich habe etwas ähnliches in der 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> 

Mein Problem mit diesem Ausdruck ist filter:{persona[0]:respuesta[3]}, es scheint zu sein, dass AngularJS nicht Ausdruck 2-Arrays an die akzeptiert gleicher Filter Auch habe ich 'persona[0]:respuesta[3]' verwendet, aber hat nicht funktioniert.

habe ich diesen Fehler mit diesem 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]}]. 

der andere, ich Fehler nicht bekommen haben, sondern auch habe ich nicht den Benutzernamen erhalten.

Antwort

0

Nach einigen mehr Forschung, fand ich diese map array to another array

Und ich ersetzen filter für ng-if

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