1

我正在尝试在 Angular-meteor 上的 2 个集合之间建立关系。

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

在这篇文章中,它使用 Iron Router 在加载控制器之前加入字段。这似乎是一个不错的解决方案,因为如果 2 个城市属于同一区域,它不会带来超过一次的区域。如何使用 Angular 的路由器在它们之间进行映射?

我尝试过发布复合,但似乎每个城市都会对其区域进行查询。

有没有更 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 回答