1

Angular-meteor で 2 つのコレクション間の関係を作成しようとしています。

areas - top in the structure
city - belongs to an area

この投稿では、Iron Router を使用して、コントローラーのロード前にフィールドを結合します。2 つの都市が同じエリアに属している場合、そのエリアを 2 回以上取得することはないので、これは良い解決策のようです。angularのルーターを使用して、それらの両方の間でマッピングを行うにはどうすればよいですか?

私はpublish-compositeを試しましたが、都市ごとにその地域のクエリを実行するようです。

それを行うためのよりAngularishな方法はありますか?

4

1 に答える 1

2

良い

私がしたことは:

  • 都市と地域の両方でパブリッシュを作成しました。エリアは都市のエリアのみでフィルタリングされます
  • 私のコントローラーでは、このパブリッシャーを購読し、両方のコレクションを取得しました
  • 都市のエリア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>
于 2015-07-07T02:28:40.270 に答える