首页 > 解决方案 > Angular 1.6.1 ng--option 值以 type 为前缀:

问题描述

这个问题快把我逼疯了。我正在尝试使用 ng-options 预先选择一个值,如下所示:

<select name="listing_type_id" ng-model="listing_type_id" 
        ng-options="i.id as i.name for i in listingTypes">
</select>

这项工作,但我在生成的下拉列表中的值以“数字:”为前缀 - 出于某种令人费解的原因。

我知道这在 Angular 1.x 的早期版本中不会发生。我正在使用受此烦恼影响的 1.6.1。

我做了一些阅读,人们建议在 ng-options 指令中使用“track by i.id”,这确实根据需要删除了类型前缀,但也杀死了我预先选择的项目。我还读到我不应该关心值字段中的值是如何呈现的,因为我应该使用 $scope 来读取所选项目。就我而言,我不是通过 angular 提交表单,我只是使用 angular 进行一些验证。

这是我的小提琴:

https://jsfiddle.net/qhg63w2f/

标签: angularjsng-options

解决方案


Please pre defile your values in controller what you selected.

var app = angular.module('testApp', []);
app.controller('testController', ['$scope', function($scope) {
  /* Pre defile values if you are not seleted than blank pass*/
	$scope.myDropDown = 'two';
  
  /* ng-options values pre define */
  $scope.names = ["one", "two", "three"];
  
  $scope.listing_type_id = 3;
  $scope.listingTypes = [
    {"id" : 1, "name" : "one"}, 
    {"id" : 2, "name" : "two"}, 
    {"id" : 3, "name" : "three"}
  ];
}]);
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.6.1/angular.min.js"></script>
<div ng-app="testApp" ng-controller="testController as $ctrl">
  <div>
    Simple select dropdown : 
    <select ng-model="myDropDown">
      <option value="one">One</option>
      <option value="two">Two</option>
      <option value="three">Three</option>
    </select>
  </div>
  <!-- ng-option to set values from controller and pre define selected values -->
  <div>
    ng-option : 
    <select ng-model="myDropDown" ng-options="item for item in names"></select>
  </div>
  
  <div ng-if="myDropDown == 'two' || myDropDown == 'three'">
    <!-- Will be displayed only when you select 'two' or 'three' -->  
    <input type="text" ng-model="fname" />
  </div>

  <div>
    Your Code ng-option : 
    <select name="listing_type_id" ng-model="listing_type_id" ng-options="i.id as i.name for i in listingTypes"></select>
  </div>
  
</div>


推荐阅读