2013-05-01 71 views
1

我想使用angularjs設置加載選擇框的默認項目。使用angularjs設置選擇框的默認項目

我加載從2 JSON的兩個選擇框,所以第二個選擇框,命名爲 '城市' 的第一個選擇框中依賴關 '國家':

<label>Country:</label> 
    <select name="country" ng-model="form.country" 
     ng-options="c.n for c in countryList" 
     ng-change="countryChanged()" required></select> 

    <label>City:</label> 
    <select name="city" ng-model="form.city" 
     ng-options="c for c in cityList" required></select> 

PLUNKER http://plnkr.co/edit/hKZLbMbwGfmaa8CtSy0H?p=preview

它使用$http.get加載選擇框。如果我將它默認爲第一個選項,它會裝載得很好。但讓我們說,我想指定一個特定的選項來加載,但我只能從json發送一個特定的值,我會怎麼做?在下面的代碼中,註釋行是我嘗試過的,但它所做的只是加載正確的城市列表,但不選擇國家/地區選擇框。

countries.json

[ 
    {"c":"au","n":"Australia","g":"1"}, 
    {"c":"fr","n":"France","g":"2"}, 
    {"c":"ge","n":"Germany","g":"2"} 
] 

控制器:

$http.get('countries.json') 
    .success(function (data) { 
    $scope.countryList = data; 
    $scope.form.country = data[0]; 
    // $scope.form.country.c = 'fr'; <<<--- *trying to set default* 
    $scope.countryChanged(); 
}); 

$scope.countryChanged = function() { 

    $http.get($scope.form.country.c + '-cities.json') 
    .success(function (data) { 
     $scope.cityList = data; 
     $scope.form.city = data[0]; 
    }); 
} 

而且,如果有更好的方式來實現這一目標,請張貼。

注意:我無法加入json。我分裂它,因爲在現實世界中,可能有100個國家,每個國家都有100個城市,json將會非常龐大​​。

回答

3

不確定,但這是否符合要求? http://plnkr.co/edit/rBDVzg7iXfaHu4XmiVsb?p=preview

var selectCountry = function(data, code) { 
    for (var i = 0; i < data.length; i++) { 
    var country = data[ i ]; 
    if (country.c !== code) { continue; } 
    return country 
    } 
}; 

$http.get('countries.json') 
    .success(function (data) { 
    $scope.countryList = data; 
    $scope.form.country = selectCountry(data, 'fr'); 
    $scope.countryChanged(); 
}); 
+0

謝謝。幾乎是我以後的事情。雖然我認爲會有一種'角色'的方式來做到這一點。 Angularjs需要一些json在那裏查詢內容(*咳嗽* linq);) – jzm 2013-05-01 07:06:44

1

只需設置你的控制器中第12行:

$scope.form.country = data[1]; 

它集法國爲默認,希望我理解你的問題。

相關問題