Як встановити вибраний варіант керування випадаючого списку за допомогою кутового JS


139

Я використовую Angular JS і мені потрібно встановити вибраний параметр керування випадаючого списку за допомогою кутового 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"?


5
<option value="0" ng-selected="true">set of 6 traits</option>
Мухаммед Шахзад

Відповіді:


191

Я сподіваюся, що я розумію ваше запитання, але ng-modelдиректива створює двосторонню прив'язку між обраним елементом у контролі та значенням item.selectedVariant. Це означає, що зміна item.selectedVariantJavaScript або зміна значення в елементі управління оновлює інше. Якщо 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, де знаходиться елемент управління. Чи слід встановити вибраний Variant там або безпосередньо на контролі?
themhz

Зазвичай ви встановлюєте ці речі в контролері, на $scopeзмінній. Отже, припускаючи, що ви знаходитесь в одній області застосування, у своєму контролері можна сказати $scope.item.selectedVariant = 0, щоб встановити вибране значення за замовчуванням. Ви також можете встановити змінну безпосередньо в керуванні, в HTML, використовуючи директиву ng-init , але, на мою думку, це стає досить безладним!
Стів Кльостерс

Не могли б ви детальніше зупинитися на тому, що variantsстосується вашої сфери? Вам слід було б item.selectedVariantточно встановити елемент variants.
Стів Кльостерс

$ range.item.selectedVariant = 0; це
розібне

чи можете ви надати синтаксис, використовуючи, будь ласка, ng-init?
themhz

34

Я не знаю, чи це допоможе комусь, чи ні, але, коли я стикався з тією ж проблемою, я думав поділитися тим, як отримав рішення.

Ви можете використовувати трек за атрибутом у вашомуng-options .

Припустимо, що у вас є:

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"

Сподіваюся, це допоможе комусь у майбутньому.


Так! нарешті! Дякую
davaus

Чудово. Я пропустив трек, щоб динамічно це зробити.
Джон

Нарешті! Мою проблему вирішили шляхом відстеження. Дякую
Кішань

Це те, чого мені не вистачало! Я встановлював ngModelналежним чином поле діапазону , але воно не працювало, поки я не додав track by! Дякую!
Сінді К.

7

Якщо ви призначите значення 0, item.selectedVariantвоно повинно бути вибране автоматично. Перевірте зразок на http://docs.angularjs.org/api/ng.directive:select, який вибирає червоний колір за замовчуванням, просто призначивши його $scope.color='red'.


де я встановив item.selectedVariant? якщо я визначаю $ range.item.selectedVariant = 0; у контролері файлу кутовий розрив
themhz

3
Ви можете також вставити відповідні HTML?
Тадеуш Вуйцік

Я думаю, що для кожного елемента в порядкуGrid потрібно було вибратиVariant встановлено 0
Tadeusz Wójcik

Ви можете надати зразок коду? Я не знайомий з кутовим вибаченням
themhz

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>

Що робити, якщо у мене було спадання, яке було декількома селекторами. Просте встановлення ідентифікаторів у моделі не працює
Nikhil Sahu

2

Простий спосіб

Якщо у вас є відповідь Користувача або визначений Вами масив / 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>    

1

Це може бути корисним. Прив’язка дози не завжди діє.

<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>

Наприклад. Ви заповнюєте список вихідних моделей від послуги відпочинку. Вибране значення було відоме для списку заповнення і було встановлено. Після виконання запиту на відпочинок з параметром $ http список буде виконано. Але вибраний варіант не встановлений. З невідомих причин AngularJS у тіньовому $ дайджесті виконання не прив'язує вибране, як це повинно бути. Я повинен використовувати JQuery для встановлення вибраного. Це важливо! Кутова в тіні додає префікс до значення attr "значення" для породжених ng-повторів оптино. Для 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);
       }
   });
}

0

Спробуйте наступне:

Файл 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>

Вже є хороше рішення, яке працює і було прийнято ОП, що воно вирішує його питання.
Л. Гутхардт

0

Це код, який я використав для встановленого вибраного значення

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>

спробуйте це на кутовій основі


0

JS:

$scope.options = [
  {
    name: "a", 
    id: 1 
  },
  {
    name: "b",
    id: 2 
  }
];
$scope.selectedOption = $scope.options[1];
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.