使用过滤器映射两个 json 数组
Map two json arrays using filters
我正在使用 AngularJS 开发一个论坛,并将 MySQL 与 WS API 连接起来。我的想法是,当我的用户回复时,我应该得到回复和 his/her 名称。
这是我的数据库 MER
如您所见,
- 一个主题(主题)可以有多个响应(回复)。
- 一个角色(用户)可以有多个响应(回复)以及多个主题(主题).
现在,在论坛控制器中,我收到 $http
两个回复:
url2
-> 通过id(from $routeParams
) = id_tema[获取主题过滤的回复=68=](在数据库上)
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]
(user id) 应该等于respuesta[3]
,为了两个得到用户名persona[3]
.
所以我跟着下一个问题 做了类似的事情 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]}].
另一个,我没有报错,但是我也没有得到用户名。
经过更多研究,我发现了这个
然后我将 filter
替换为 ng-if
<span ng-repeat="persona in personas" ng-if="respuesta[3] === persona[0]" > {{persona[3]}} {{persona[4]}} {{persona[5]}}</span>
我正在使用 AngularJS 开发一个论坛,并将 MySQL 与 WS API 连接起来。我的想法是,当我的用户回复时,我应该得到回复和 his/her 名称。
这是我的数据库 MER
如您所见,
- 一个主题(主题)可以有多个响应(回复)。
- 一个角色(用户)可以有多个响应(回复)以及多个主题(主题).
现在,在论坛控制器中,我收到 $http
两个回复:
url2
-> 通过id(from$routeParams
) = id_tema[获取主题过滤的回复=68=](在数据库上)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]
(user id) 应该等于respuesta[3]
,为了两个得到用户名persona[3]
.
所以我跟着下一个问题
<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]}].
另一个,我没有报错,但是我也没有得到用户名。
经过更多研究,我发现了这个
然后我将 filter
替换为 ng-if
<span ng-repeat="persona in personas" ng-if="respuesta[3] === persona[0]" > {{persona[3]}} {{persona[4]}} {{persona[5]}}</span>