angular 下拉列表选项变的不表示

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了angular 下拉列表选项变的不表示相关的知识,希望对你有一定的参考价值。

参考技术A 在控制器中添加相应的初始值。
在使用AngularJS中的select组件开发的时候,莫名其妙的第一个选项就变成空白了,而且选中其中非空白的地方,第一个选项的空白位置又奇妙的消失了。今天就举几个例子给大家介绍一下种种情况的处理办法,第一种办法就是在select的下面加上一个默认option,不过有一点必须特别注意,就是在option中的value值必须设置为“”(也就是空字符串),否则上面第一个选项还是会留空白出来。在value中添加自己想要的值信息,然后再控制器中进行传初始值。但是这个时候大家可能会又有一个问题,就是我如果想第一个不想要默认值呢,我就想把数据的任意一个值放在第一个选项里面呢,而且还不能留空白在上面。只要在控制器中添加相应的初始值,就可以实现select中默认选中的效果了。这样基本就全部解决了select中第一个选项留空白的问题了。

如何使用 Angular JS 设置下拉列表控件的选定选项

【中文标题】如何使用 Angular JS 设置下拉列表控件的选定选项【英文标题】:How to set a selected option of a dropdown list control using angular JS 【发布时间】:2013-07-31 21:11:24 【问题描述】:

我正在使用 Angular JS,我需要使用 Angular JS 设置下拉列表控件的选定选项。如果这很荒谬,请原谅我,但我是 Angular JS 的新手

这是我的html的下拉列表控件

 <select ng-required="item.id==8 && item.quantity > 0" name="posterVariants"
   ng-show="item.id==8" ng-model="item.selectedVariant" 
   ng-change="calculateServicesSubTotal(item)"
   ng-options="v.name for v in variants | filter:type:2">
  </select>

填充后我得到

 <select ng-options="v.name for v in variants | filter:type:2" ng-change="calculateServicesSubTotal(item)"
ng-model="item.selectedVariant" ng-show="item.id==8" name="posterVariants"
ng-required="item.id==8 &amp;&amp; item.quantity &gt; 0" class="ng-pristine ng-valid ng-valid-required">
    <option value="?" selected="selected"></option>
    <option value="0">set of 6 traits</option>
    <option value="1">5 complete sets</option>
</select>

如何设置value="0"的控件被选中?

【问题讨论】:

&lt;option value="0" ng-selected="true"&gt;set of 6 traits&lt;/option&gt; 【参考方案1】:

JS:

$scope.options = [
  
    name: "a", 
    id: 1 
  ,
  
    name: "b",
    id: 2 
  
];
$scope.selectedOption = $scope.options[1];

【讨论】:

【参考方案2】:

这是我用于设置选定值的代码

countryList: any = [ "value": "AF", "group": "A", "text": "Afghanistan",  "value": "AL", "group": "A", "text": "Albania",  "value": "DZ", "group": "A", "text": "Algeria",  "value": "AD", "group": "A", "text": "Andorra",  "value": "AO", "group": "A", "text": "Angola",  "value": "AR", "group": "A", "text": "Argentina",  "value": "AM", "group": "A", "text": "Armenia",  "value": "AW", "group": "A", "text": "Aruba",  "value": "AU", "group": "A", "text": "Australia",  "value": "AT", "group": "A", "text": "Austria",  "value": "AZ", "group": "A", "text": "Azerbaijan"];
 
 
 for (var j = 0; j < countryList.length; j++) 
      //debugger
      if (countryList[j].text == "Australia") 
          console.log(countryList[j].text); 
          countryList[j].isSelected = 'selected';
      
      
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.7.5/angular.min.js"></script>
<label>Country</label>
<select class="custom-select col-12" id="Country" name="Country"   >
<option value="0" selected>Choose...</option>
<option *ngFor="let country of countryList" value="country.text" selected="country.isSelected"   > country.text</option>
</select>

在一个角度框架上试试这个

【讨论】:

【参考方案3】:

它可能很有用。绑定并不总是有效。

<select id="product" class="form-control" name="product" required
        ng-model="issue.productId"
        ng-change="getProductVersions()"
        ng-options="p.id as p.shortName for p in products">
</select>

例如。您从 rest-service 填充选项列表源模型。所选值在填充列表之前已知并已设置。使用 $http list 选项执行 rest-request 后完成。但未设置选定的选项。由于未知原因,AngularJS 在影子 $digest 中执行未按应有的方式选择绑定。我必须使用 JQuery 来设置选中。这很重要!阴影中的 Angular 将前缀添加到由 ng-repeat optinos 生成的 attr“值”的值。对于 int,它是“数字:”。

$scope.issue.productId = productId;
function activate() 
   $http.get('/product/list')
     .then(function (response) 
       $scope.products = response.data;

       if (productId) 
           console.log("" + $("#product option").length);//for clarity                       
           $timeout(function () 
               console.log("" + $("#product option").length);//for clarity
               $('#product').val('number:'+productId);
               //$scope.issue.productId = productId;//not work at all
           , 200);
       
   );

【讨论】:

【参考方案4】:

尝试以下方法:

JS 文件

this.options =  
        languages: [language: 'English', lg:'en', language:'German', lg:'de']
;
console.log(signinDetails.language);

HTML 文件

<div class="form-group col-sm-6">
    <label>Preferred language</label>
    <select class="form-control" name="right" ng-model="signinDetails.language" ng-init="signinDetails.language = options.languages[0]" ng-options="l as l.language for l in options.languages"><option></option>
    </select>
</div>

【讨论】:

已经有一个很好的解决方案,它可以工作并且已经被 OP 接受,它可以解决他的问题。【参考方案5】:

我不知道这是否会帮助任何人,但由于我面临同样的问题,我想分享我是如何获得解决方案的。

您可以在ng-options 中使用track by 属性。

假设您有:

variants:['id':0, name:'set of 6 traits', 'id':1, name:'5 complete sets']

您可以将您的ng-options 提及为:

ng-options="v.name for v in variants track by v.id"

希望这对将来的人有所帮助。

【讨论】:

是的!最后!谢谢 太棒了。为了动态地执行此操作,我错过了轨道。 终于!我的问题通过跟踪解决了。谢谢 这就是我所缺少的!我正在正确设置绑定到ngModel 的范围字段,但是直到我添加了track by!谢谢!【参考方案6】:

简单的方法

如果您有一个用户作为响应或您定义的数组/JSON,首先您需要在控制器中设置选定的值,然后在 html 中放置相同的模型名称。我写这个例子是为了用最简单的方式解释。简单例子 内部控制器:

$scope.Users = ["Suresh","Mahesh","Ramesh"]; 
$scope.selectedUser = $scope.Users[0];

你的 HTML

<select data-ng-options="usr for usr in Users" data-ng-model="selectedUser">
</select>

复杂示例 内部控制器:

$scope.JSON = 
       "ResponseObject":
           [
               "Name": "Suresh",
               "userID": 1
           ,
           
               "Name": "Mahesh",
               "userID": 2
           ]
   ;
   $scope.selectedUser = $scope.JSON.ResponseObject[0];

你的 HTML

<select data-ng-options="usr.Name for usr in JSON.ResponseObject" data-ng-model="selectedUser"></select>
<h3>You selected: selectedUser.Name</h3>    

【讨论】:

【参考方案7】:

我看到这里已经写了很好的答案,但有时以其他形式写同样的答案会有所帮助

<div ng-app ng-controller="MyCtrl">
  <select ng-model="referral.organization" ng-options="c for c in organizations"></select>
</div>

<script type='text/javascript'>
  function MyCtrl($scope) 
    $scope.organizations = ['a', 'b', 'c', 'd', 'e'];
    $scope.referral = 
      organization: $scope.organizations[2]
    ;
  
</script>

【讨论】:

如果我有一个多选下拉菜单怎么办。简单地在模型中设置 id 是行不通的【参考方案8】:

希望我能理解您的问题,但ng-model 指令在控件中的选定项和item.selectedVariant 的值之间创建了双向绑定。这意味着在 JavaScript 中更改 item.selectedVariant 或更改控件中的值会更新另一个。如果item.selectedVariant 的值为0,则应选择该项目。

如果variants 是对象数组,则必须将item.selectedVariant 设置为其中一个对象。我不知道你的范围内有哪些信息,但这里有一个例子:

JS:

$scope.options = [ name: "a", id: 1 ,  name: "b", id: 2 ];
$scope.selectedOption = $scope.options[1];

HTML:

<select data-ng-options="o.name for o in options" data-ng-model="selectedOption"></select>

这将使“b”项被选中。

【讨论】:

我有一个名为 order.js 的控件文件,因此 html 名称与控件所在的 order.html 相同。我应该在那里设置 selectedVariant 还是直接在控件上设置? 通常你会在控制器的$scope变量上设置这些东西。所以假设你在一个单一的范围内,在你的控制器中你可以说$scope.item.selectedVariant = 0,来设置默认的选择值。您还可以使用ng-init 指令直接在控件上设置变量,在 HTML 中,但在我看来这会变得相当混乱! 您能否详细说明variants 在您的范围内是什么?您必须将 item.selectedVariant 完全设置为 variants 的项目。 $scope.item.selectedVariant = 0;如果我把它放在控制器文件中,这将打破页面 你能提供使用ng-init的语法吗?【参考方案9】:

如果您将值 0 分配给 item.selectedVariant,则应自动选择它。 查看http://docs.angularjs.org/api/ng.directive:select 上的示例,它默认选择红色,只需分配$scope.color='red'

【讨论】:

在哪里设置 item.selectedVariant?如果我定义 $scope.item.selectedVariant = 0;在文件的控制器中,角度分解 你能粘贴匹配的html吗? 我认为 orderGrid 中的每个项目都需要将 selectedVariant 设置为 0 你能提供一个示例代码吗?我不熟悉角度抱歉

以上是关于angular 下拉列表选项变的不表示的主要内容,如果未能解决你的问题,请参考以下文章

从 Angular 的下拉列表中删除选定的选项

如何使用 Angular JS 设置下拉列表控件的选定选项

Angular 2 模型驱动形式的下拉列表

如何在Angular 7中单击按钮时获取下拉列表的选定选项[重复]

我应该如何从 Angular-2 的下拉列表中使用多选选项绑定数组

在 Angular 7 中,选择下拉值 id 传递给 ngFor 列表中的所有选择下拉列表