【问题标题】:Can't change select option item angular无法更改选择选项项目的角度
【发布时间】:2015-07-06 22:35:36
【问题描述】:

我有一个这样的选择选项:

<select ng-init="filterSelected = getItems.data.key" 
        ng-model="filterSelected" 
        ng-options="data.key as data.label for data in getItems.data" ></select>

我在其中解析了一个 json,它返回了一些结果,这些结果在此选择中显示为项目。这不是问题,我可以显示这些项目,但我不能更改它们。它卡在第一个上,即使我尝试更改值仍然显示第一个。顺便说一句,我的 javascript 中有一个函数:

$scope.getObjects = function(){
            for (var i = 0; i < $scope.getItems.data.length; i++) {
                if($scope.filterSelected = $scope.getItems.data[i].key){
                    return $scope.getItems.data[i].objects;
                }
            }
        };

这个函数需要,因为我必须在我的 json 中找到正确的对象来循环,就像这样:

"data": [
        {
            "label": "first",
            "objects": [
                {
                    "name": "firstObj",
                    "attributes": [
                        {
                            ----,
                            ----,
                            ----
                        },
                        {
                            ----,
                            ----,
                            ----
                        }
                    ]
                }
            ],
            "key": "1"
        },
        ---
        ---

所以我可以找到我选择的“对象”并且我可以找到该对象的正确属性。问题是卡住了。结果是正确的,但它只显示了第一个。也许模型有问题?

【问题讨论】:

  • filterSelected = getItems.data.key 这里 getItems.data.keyundefined 因为 getItems.data 是数组并且没有 key 属性
  • 那我该如何解决呢?你有什么建议?
  • 可以提供jsfiddle或者plunker吗?
  • 我认为不会。因为页面真的很大,而且代码的每一部分都相互关联......如果你能告诉我一些东西来帮助我处理我写的信息,你对我有很大帮助

标签: javascript json angularjs html-select angular-ngmodel


【解决方案1】:

您可以在ngOptions中选择您要选择的值

在你的代码中选择key字段,然后通过key尝试获取objects,但是你可以一次获取objects

<select
    ng-model="filterSelected" 
    ng-options="data.objects as data.label for data in getItems.data" ></select>

var myApp = angular.module('myApp', []);

myApp.controller("mycontroller", ["$scope", "$http",
  function($scope, $http) {
    $scope.getItems = {
      "data": [{
        "label": "first",
        "objects": [{
          "name": "firstObj",
          "attributes": [{
            "att1": "asd",
            "att2": "asd2"
          }, {
            "att3": "asd3",
            "att4": "asd4"
          }]
        }],
        "key": "1"
      }, {
        "label": "second",
        "objects": [{
          "name": "secondObj",
          "attributes": [{
            "att1": "asd",
            "att2": "asd2"
          }, {
            "att3": "asd3",
            "att4": "asd4"
          }]
        }],
        "key": "2"
      }]

    };
    $scope.filterSelected = $scope.getItems.data[0].objects;
  }
]);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app='myApp' ng-controller='mycontroller'>
  <select ng-model="filterSelected" ng-options="data.objects as data.label for data in getItems.data"></select>

  {{filterSelected}}
</div>

UPDATE 用于评论,因此您需要保存完整对象,而不是仅保存对象、标签或关键属性。

<select
    ng-model="filterSelected" 
    ng-options="data.label for data in getItems.data" ></select>

var myApp = angular.module('myApp', []);

myApp.controller("mycontroller", ["$scope", "$http",
  function($scope, $http) {
    $scope.getItems = {
      "data": [{
        "label": "first",
        "objects": [{
          "name": "firstObj",
          "attributes": [{
            "att1": "asd",
            "att2": "asd2"
          }, {
            "att3": "asd3",
            "att4": "asd4"
          }]
        }],
        "key": "1"
      }, {
        "label": "second",
        "objects": [{
          "name": "secondObj",
          "attributes": [{
            "att1": "asd",
            "att2": "asd2"
          }, {
            "att3": "asd3",
            "att4": "asd4"
          }]
        }],
        "key": "2"
      }]

    };
    $scope.filterSelected = $scope.getItems.data[0];
  }
]);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app='myApp' ng-controller='mycontroller'>
  <select ng-model="filterSelected" ng-options="data.label for data in getItems.data"></select>

  <div>objects: {{filterSelected.objects}}</div>
  <div>key: {{filterSelected.key}}</div>

</div>

【讨论】:

  • 我很抱歉,但是否可以显示,总是使用这个 jsfiddle.net/k6s357L8/2 也选择了“key”?我的意思是例如仅在选择

    标记的底部显示,例如

    first

  • 看这里:jsfiddle.net/k6s357L8/3 但这样我不知道这个索引..现在是静态的 2!
  • 嗨,Grundy,我还有一个问题要问你,希望你能帮助我。如果你愿意,这里的问题是:stackoverflow.com/questions/30046867/… 真的很感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-12
  • 1970-01-01
  • 1970-01-01
  • 2021-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多