【问题标题】:Angular setting selected using ng-model, ng-init, ng-options and form collection使用 ng-model、ng-init、ng-options 和表单集合选择的角度设置
【发布时间】:2024-04-10 19:00:01
【问题描述】:

我正在尝试通过 JSON 调用动态地在 select 元素上设置 selected 选项。如果选项是静态的,我可以使用此方法设置它,但对于我的一生,我无法在使用 ng-options 或 ng-repeat 填充选项时设置它。这是我的一个下拉列表的 HTML:

<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"
    },...

【问题讨论】:

    标签: angularjs ng-options ng-init


    【解决方案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 中有==,这会阻止正确设置初始值。

    【讨论】:

    • 我以前试过这个,但我又试了一次,还是不行。除了没有价值的选项外,仍然没有设置任何选择。我认为原因是:我正在使用 $scope.content 的子集将数据推送到 POST 上的表单。当我尝试访问 DOM 中的这些子集时,我不能:我只能看到 post 请求的有效负载中的数据。
    • 哎呀!我把它收回!谢谢!我不得不将 data.data.defaultLanguage.code 更改为 data.data.defaultLanguage,它就像一个魅力!