在AngularJS中的多个选择框中拆分JSON数组

时间:2013-04-16 02:19:03

标签: javascript json angularjs

我是AngularJS的新手,对我来说很光鲜。首先,我在我的网站的一些部分使用AngularJS,而不是整个事情。我有几个选择框,其中一个依赖于另一个。一个包含国家/地区列表,另一个包含所选国家/地区的城市。

在过去,我会将我的json分成2个查询到服务器,所以在国家更改后,它将发送所选的值,服务器将相应地返回一个json列表,它将被插入到选择框中使用jQuery的。这一次,并使用http://builtwith.angularjs.org/作为指南,我决定将所有内容作为一个json返回,并且仅在javascript中处理此功能。

让我们说,我的 json 看起来像这样:

[
  { "code": 1, "country": "Germany", "cities": [ "Berlin", "Munich" ] },
  { "code": 2, "country": "Italy", "cities": [ "Rome", "Venice" ] },
  { "code": 3, "country": "United Kingdom", "cities": [ "London", "Manchester" ]}
]

我需要国家/地区的所有值作为国家/地区选择框的列表,以及其他选择框的每个城市的列表。

到目前为止,这是控制器

angular.module('myApp', [])
    .controller('MyController', ['$scope', '$http', function ($scope, $http) {


        $http.get('/api/locations')
            .success(function (data, status, header, config) {

                $scope.locations = data[0];
                $scope.countryList = [];
                $scope.cityList = [];

                for (var i = 0; i < data.length; i++) {
                    $scope.countryList.push([data[i].code, data[i].country]);
                    for (var j = 0; j < data[i].cities.length; j++) {
                        $scope.cityList.push([data[i].code + '-' + data[i].cities[j], data[i].cities[j]]);
                    }
                }
            });
    }]);

我的选择框:

国家

<select ng-model="country" data-ng-options="c for c in countryList"></select>

城市

<select data-ng-model="city" data-ng-options="c for c in cityList"></select>

目前,两个选择框都已填充,但它们的文本包含数组的两个值。城市框包含所有城市,而不仅仅是第一个国家/地区。

我不确定我是否走在正确的道路上,或者是否有更简单的方法来实现这一目标。

总结一下,我想知道:

  1. 我应该将整个json作为一个请求/响应和处理 它在JS?
  2. 如何将每个选择框加载到'官方'angularjs方式?
  3. 我知道选择框上的ng-change属性,但我知道 不确定我如何创建查询并更改城市列表值 根据所选国家。
  4. 这是 plunk http://plnkr.co/edit/zAcRjSDm9OndxugtsAOs?p=preview

    谢谢!

1 个答案:

答案 0 :(得分:3)

  

我不确定我是否走在正确的道路上,或者是否有更简单的方法来实现这一目标。

是的,你正走在The Angular Way的道路上。是的,有一种更简单的方法。

  

我知道选择框上的ng-change属性,但我不确定如何创建查询并根据所选国家/地区更改城市列表值。

这是一个分叉的Plunk,它演示了如何根据第一个选择框的输出设置第二个选择框。

国家/地区选择框通过ng-model进行双向绑定,因此结果绑定到名为country的值

国家/地区选择框使用country.cities作为输入,并将所选值绑定到city

  

我应该将整个json保留为一个请求/响应并在JS中处理它吗?

这取决于您如何构建服务。如果你不想将城市与国家分开,那就让它们受限制。

否则您可能希望拥有以下REST API:

get /country //returns array of all countries
get /<countryname>/cities //returns array of all cities in country

缺点是您需要对数据进行多次获取请求。好处是你的api更加模块化。但这取决于您的使用案例。

  

如何将每个选择框加载到'官方'angularjs方式?

你的plunk语法'c for city in CityList'显示正确。