2016-04-15 93 views
0

我試圖從JSON調用中動態選擇元素上設置選定的選項。如果使用這種方法的選項是靜態的,我可以設置它,但在我的生活中,當使用ng-options或ng-repeat填充選項時,我無法設置它。這裏是我的一個下拉HTML:使用ng-model,ng-init,ng-options和表單集合選擇的角度設置

<select class="form-control" id="authQLang" name="authQLang" ng-model="content.languages" ng-options="item as item.name for item in languages track by item.code" ng-init="content.languages == defaultLang" required> 
    <option value="">Select a language</option> 

    </select> 

和代碼在我的控制器:

$scope.content = data.data; 
    $scope.defaultAcct = data.data.defaultAccount.ID; 
    $scope.defaultLang = data.data.defaultLanguage.code; 
    $scope.accounts = []; 
     angular.forEach(data.data.accounts, function(value, key) { 
      $scope.accounts.push(value); 
     }); 
    $scope.languages = []; 
     angular.forEach(data.data.languages, function(value, key) { 
      $scope.languages.push(value); 
     }); 

而且JSON格式:

{ 
"code": 0, 
"message": "", 
"data": { 
    "defaultAccount": { 
     "ID": "6481618", 
     "name": "Account X" 
    }, 
    "defaultLanguage": { 
     "code": "en-US", 
     "name": "English US" 
    }, 
    "accounts": [{ 
     "ID": "6481004", 
     "name": " Account A." 
    },... 
    "languages": [{ 
     "code": "en-us", 
     "name': "English US" 
    },... 

回答

1

擺脫ng-init,你在控制器中設置這個值會好得多。從控制器更改它也會改變選擇。

<select class="form-control" id="authQLang" 
    name="authQLang" ng-model="content.languages" 
    ng-options="item as item.name for item in languages track by item.code" 
    required> 
    <option value="">Select a language</option> 
</select> 

然後在你的控制器:

$scope.content = data.data; 
$scope.defaultAcct = data.data.defaultAccount.ID; 
$scope.defaultLang = data.data.defaultLanguage.code; 
$scope.accounts = []; 
    angular.forEach(data.data.accounts, function(value, key) { 
     $scope.accounts.push(value); 
    }); 
$scope.languages = []; 
    angular.forEach(data.data.languages, function(value, key) { 
     $scope.languages.push(value); 
    }); 

# add this: 
$scope.content.languages = $scope.defaultLang 

,只是更新$scope.content.languages要更改選擇的任何時間。

噢,你在你的ng-init中有==這會阻止正確的初始值設置。

+0

我之前嘗試過,但我再次嘗試,它仍然無法正常工作。還沒有選擇被設置,除了沒有值的選項。我認爲原因是:我使用$ scope.content的子集將數據推送到POST上的表單。當我嘗試訪問DOM中的這些子集時,我不能:我只能看到發佈請求的有效負載中的數據。 –

+0

哎呀!我把它收回!謝謝!我不得不將data.data.defaultLanguage.code更改爲data.data.defaultLanguage,它的工作方式就像一個魅力! –