Angular 1.6.1 ng -значения параметров с префиксом типа:

#angularjs #ng-options

#angularjs #ng-параметры

Вопрос:

Эта проблема сводит меня с ума. Я пытаюсь предварительно выбрать значение с помощью ng-options следующим образом:

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

Это работает, но мое значение в сгенерированном выпадающем списке имеет префикс «number:» — по какой-то непонятной причине.

Я знаю, что этого не происходит в более ранней версии Angular 1.x. Я использую 1.6.1, на который влияет это раздражение.

Я немного почитал, и люди предлагают использовать «отслеживать по i.id » в директиве ng-options это действительно удалило префикс type по желанию, но также уничтожило мой предварительно выбранный элемент. Я также читал, что меня не должно волновать, как отображается значение в поле value, поскольку я должен использовать $ scope для чтения выбранного элемента. В моем случае я не отправляю свою форму через angular, я просто использую angular для некоторой проверки.

Вот моя скрипка:

https://jsfiddle.net/qhg63w2f/

Комментарии:

1. Скрипка не используется ng-options .

Ответ №1:

 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>  

Комментарии:

1. Я не вижу ничего другого в вашем решении, значения отображаются как «строка: …» и «число: ….»