【问题标题】:Angular - Select inside ng-repeatAngular - 在 ng-repeat 中选择
【发布时间】:2017-06-06 10:38:24
【问题描述】:

我在 ng-repeat 中的选择有问题,问题是我在 ng-repeat 中创建的每个选择都被禁用,如果我尝试打开下拉菜单,它不会显示选项。

选择是在 ng-repeat 中生成的,选择的数量和所有值都是 在 JSON 中。

我认为问题可能是选择的 ng-model,我必须动态分配一个 ng-model,但我不知道如何。

这是代码(我不包括获取 JSON 的服务,但它确实有效)

JSON

[  
   {  
      "Id":1,
      "Name":"Tipo Fuga",
      "Values":[  
         {  
            "Name":"Tipo Fuga",
            "Value":"Week End in Famiglia",
            "Id":10555
         },
         {  
            "Name":"Tipo Fuga",
            "Value":"Fuga romantica",
            "Id":10560
         }
      ]
   },
   {  
      "Id":2,
      "Name":"Localita",
      "Values":[  
         {  
            "Name":"Localita",
            "Value":"Al mare",
            "Id":111
         },
         {  
            "Name":"Localita",
            "Value":"In montagna",
            "Id":112
         }
      ]
   },
   {  
      "Id":3,
      "Name":"Num Notti",
      "Values":[  
         {  
            "Name":"Num Notti",
            "Value":"1",
            "Id":11076
         },
         {  
            "Name":"Num Notti",
            "Value":"2",
            "Id":11077
         }
      ]
   },
   {  
      "Id":4,
      "Name":"Tipo Soggiorno",
      "Values":[  
         {  
            "Name":"Tipo Soggiorno",
            "Value":"1 stella",
            "Id":1100
         },
         {  
            "Name":"Tipo Soggiorno",
            "Value":"2 stelle",
            "Id":1101
         }
      ]
   }
]

HTML

<div ng-controller="ricercaAttivita">
    <div ng-repeat="masterAttribute in masterAttributes">
        <select ng-model="selected-attr" ng-options="attr.Id as attr.Value for attr in masterAttribute.Values">
        </select>
    </div>
</div>

控制器

tantoSvagoApp.controller("ricercaAttivita", function ($scope, $http, serviceRicercaAttivita) {

    var parametersMaster = {"Id": master};
    serviceRicercaAttivita.getMasterAttributes(parametersMaster, 
    successCallBackMasterAttributes);

    function successCallBackMasterAttributes(result) {
            $scope.masterAttributes = result;
    }
});

编辑

我尝试做一件简单的事情,我在 div 中创建了一个带有静态选项的选择,当然它工作正常:

<div>
  <select>
    <option value="">TUTTE</option>
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
    <option value="4">4</option>
    <option value="5">5</option>
  </select>
</div>

如果我将 ng-repeat 指令放在 select 中不起作用,这意味着我无法打开下拉菜单然后选择选项。

<div ng-repeat="masterAttribute in masterAttributes">
  <select>
    <option value="">TUTTE</option>
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
    <option value="4">4</option>
    <option value="5">5</option>
  </select>
</div>

【问题讨论】:

  • 将您的 ng-model 声明为数组并将您的 ng-model 更改为 selected-attr[$index] 并查看它是否有效?

标签: angularjs angularjs-ng-repeat


【解决方案1】:

问题陈述似乎模棱两可。

ng-model 可以是 JSON 中的一个新属性,它保存从 select 中选择的 id

var app = angular.module("MyApp", []);
app.controller("ricercaAttivita", function($scope) {
  $scope.masterAttributes = [{
      "Id": 1,
      "Name": "Tipo Fuga",
      "Values": [{
          "Name": "Tipo Fuga",
          "Value": "Week End in Famiglia",
          "Id": 10555
        },
        {
          "Name": "Tipo Fuga",
          "Value": "Fuga romantica",
          "Id": 10560
        }
      ]
    },
    {
      "Id": 2,
      "Name": "Localita",
      "Values": [{
          "Name": "Localita",
          "Value": "Al mare",
          "Id": 111
        },
        {
          "Name": "Localita",
          "Value": "In montagna",
          "Id": 112
        }
      ]
    },
    {
      "Id": 3,
      "Name": "Num Notti",
      "Values": [{
          "Name": "Num Notti",
          "Value": "1",
          "Id": 11076
        },
        {
          "Name": "Num Notti",
          "Value": "2",
          "Id": 11077
        }
      ]
    },
    {
      "Id": 4,
      "Name": "Tipo Soggiorno",
      "Values": [{
          "Name": "Tipo Soggiorno",
          "Value": "1 stella",
          "Id": 1100
        },
        {
          "Name": "Tipo Soggiorno",
          "Value": "2 stelle",
          "Id": 1101
        }
      ]
    }
  ];
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

<body ng-app="MyApp" ng-controller="ricercaAttivita">
  <div ng-repeat="masterAttribute in masterAttributes">
    <select ng-model="masterAttribute.Selected" ng-options="attr.Id as attr.Value for attr in masterAttribute.Values">
        </select>
  </div>
  <pre>{{masterAttributes | json}}</pre>

</body>

【讨论】:

  • 我尝试设置 ng-model="masterAttribute.Id",但选择被禁用,我不明白为什么
  • 您不能设置ng-model="masterAttribute.Id",因为它已经是对象的属性。选择被禁用是什么意思?
  • 我的意思是下拉菜单没有打开,但如果我看到源代码,我会看到所有选项
  • 也许我不明白如何设置 ng-model
  • 我用一个简单的例子编辑了我的帖子,我希望它可以帮助
猜你喜欢
  • 2015-06-14
  • 2018-08-27
  • 2015-07-09
  • 2023-04-09
  • 1970-01-01
  • 1970-01-01
  • 2015-04-10
  • 2018-04-29
  • 1970-01-01
相关资源
最近更新 更多