1

У меня есть следующий выбор, который заполнен всеми странами мира, у меня есть контроллер Angularjs, который вызывает метод, который возвращает мне idCountry одной из тех стран, где переменная idCountry является идентификатором объекта, а не индексом позиции, которую объект принимает в выборе.Как выбрать опцию select в элементе Angularjs, который заполнен ng-опциями

Мне нужно предварительно выбрать эту страну в списке, используя idCountry, есть ли способ получить индекс, который этот объект имеет при выборе, используя идентификатор объекта, я прочитал несколько статей, в которых говорится, что это может быть сделано с использованием track by в выражении ng-options, но я не знаю, как это сделать.

Если мне удастся получить индекс я мог заранее выбрать вариант, как этот

$scope.countriesSelect = $scope.countriesSelect[put here the select index that I can find] 

Вот мой выбор

<select name="selectCountries" class="form-control" 
             id="selectCountries" 
             ng-model="selectCountries" 
             ng-options="country.name for country in countryList track by country.idCountry" 
             ng-change="" 
required> 
</select> 

и вот что я пытался делать в контроллере

var idCountry = id; 
$scope.selectCountries= $scope.selectCountries[idCountry] 

EDIT

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

я могу получить идентификатор любого объекта списка объектов

здесь список объектов, которые населяет мой выбор

[{idCountry: 2, name: countryName}, {idCountry: 4, name: AnothercountryName}, {idCountry: 7, name: rockyCOuntry}] 

У меня есть метод, который возвращает мне idCountry и я хочу знать, есть ли способ получить индекс выбора, используя этот idCountry , или помещая некоторое выражение в мое выражение ng-options, например, используя track by или что-то в этом роде.

Я попробовал этот $scope.selectCountries= $scope.selectCountries[idCountry] , но это не вернет мне правильную страну, если я ставлю 7 вместо установки выберите в rockyCOuntry он устанавливает выбор в другой стране, я считаю, что это потому, что идентификатор объекта списка Безразлично 't соответствует одному и тому же индексу выбора, который занимает этот объект.

+0

Не следует ng-model = "selectCountries" быть ng-model = "countriesSelect"? – jbrown

+0

Здесь есть множество подобных вопросов .... в том числе *** *** В правой части этой страницы. Ваши ng-опции выбирают только имя, ng-model не соответствует контроллеру, и вы устанавливаете объект в контроллере. Не уверен, что вы хотите – charlietfl

+0

@charlietfl Я отредактировал мой вопрос –

ответ

0

Ну, имейте в виду ваш ng-model на самом деле является object, так что вы не можете установить непосредственно countryId из <option>.Для того, чтобы достичь того, чего вы хотите, так как вы уже имеете id, вы должны сделать что-то подобное в вашем контроллере:

var selectedId = 7; // Just an example 

$scope.selectCountries = { "idCountry": selectedId };  

С другой стороны, если вы не хотите, чтобы установить всю object в ngModel, просто idCountry (который я не рекомендую), вы можете сделать следующее:

$scope.selectCountries = 7; // Just an example 

<select name="selectCountries" class="form-control" id="selectCountries" ng-model="selectCountries" ng-options="country.idCountry as country.name for country in countryList" required> 
</select> 

Демо:

(function() { 
 
    "use strict"; 
 
    angular.module('app', []) 
 
    .controller('mainCtrl', function($scope) { 
 
     $scope.countryList = [ 
 
     { 
 
      "idCountry":2, 
 
      "name":"countryName" 
 
     }, 
 
     { 
 
      "idCountry":4, 
 
      "name":"AnothercountryName" 
 
     }, 
 
     { 
 
      "idCountry":7, 
 
      "name":"rockyCOuntry" 
 
     } 
 
     ]; 
 

 
     $scope.selectCountries = { 
 
     "idCountry": 7 
 
     }; 
 
     // $scope.selectCountries = 7; 
 
    }); 
 
})();
<!DOCTYPE html> 
 
<html ng-app="app"> 
 

 
<head> 
 
    <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.7/angular.min.js"></script> 
 
</head> 
 

 
<body ng-controller="mainCtrl"> 
 
    <select name="selectCountries" class="form-control" id="selectCountries.id" ng-model="selectCountries" ng-options="country.name for country in countryList track by country.idCountry" required> 
 
    </select> 
 
    <pre ng-bind="selectCountries | json"></pre> 
 
</body> 
 

 
</html>

Примечание: Оба способа дает вам ожидаемый результат.

Надеюсь, это поможет.

+0

спасибо, что он отлично работал и dandy –