良い
私がしたことは:
- 都市と地域の両方でパブリッシュを作成しました。エリアは都市のエリアのみでフィルタリングされます
- 私のコントローラーでは、このパブリッシャーを購読し、両方のコレクションを取得しました
- 都市のエリアIDとエリア配列の適切なエリアIDに一致する情報を画面に出力するためのフィルターを作成し、その名前を返します。
コードは次のようなものです。
// server side
Meteor.publish('citiesAndAreas', function(args) {
var cities = Cities.find({}, args);
// then extract those areas ids
var areaIds = cities.map(function(p) { return p.area_id });
// then return an array containing both the cities, and their corresponding areas
return [
cities,
Areas.find({_id: {$in: areaIds}})
];
});
//client controller
$scope.modelItems = $meteor.collection(Cities).subscribe('citiesAndAreas');
$scope.areas = $meteor.collection(Areas);
// filter
angular.module("XXXX").filter('areaCity', function () {
return function (area, city) {
if (!city)
return '';
var name = _.findWhere(area, {_id: city.area_id});
if (name) {
return name.title;
} else {
return '';
}
}
});
// on the html
<md-list-item ng-repeat="item in modelItems">
{{item.title}}<br/>
{{areas | areaProfession:item}}
<md-button ng-click="remove(item)" aria-label="remove"><md-icon md-svg-icon="content:ic_clear_24px"></md-icon></md-button>
</md-list-item>