AngularJS ng-options (ke, значение) ng-model=»выбрано» не работает

#javascript #angularjs

#javascript #angularjs

Вопрос:

Это мой Html:

 <select ng-options="value.name for (key, value) in countries track by key" ng-model="selected" >
</select>
  

Это объект, над которым я пытаюсь работать:

 $scope.countries = {
    "AFG":{"name":"Afghanistan"},
    "ALB":{"name":"Albania"}
};
$scope.countriesKeys = Object.keys($scope.countries);
$scope.selected = ????;
  

Моя проблема в том, что мне не удается заставить ng-model выбранный работать, структура объекта затрудняет это.. (не удается изменить объект).

В конце концов, моя цель — создать <select> с первым выбранным параметром "ALB":{"name":"Albania"} и сделать его динамичным, чтобы при нажатии других параметров вносить $scope.selected изменения.

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

1. Спасибо, что действительно помогло, но $scope.selected теперь выбран = Object {name: «Афганистан»}, и я бы хотел, чтобы у меня тоже был ключ («AFG»)

Ответ №1:

Вы можете попробовать следующую строку:

 $scope.selected={"name":"Albania"}
  

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

1. Привет, прежде всего, я удалил «элемент как …» и динамически мой $scope.selected теперь выбран =Object {name: «Афганистан»}, и я бы тоже хотел иметь ключ (AFG), это действительно важно

2. выбранный = «выбранный»> </option> (вывод DOM) (используя ваш способ) выбранный по-прежнему не работает

3. используйте «ключ для (ключ, значение) в странах, отслеживаемых по ключу» и установите $scope.selected= ‘AFG’

4. но тогда в моем выводе html мои параметры не имеют значения

Ответ №2:

 var app = angular.module("myApp", []);

//controller
app.controller('MainCtrl', function($scope) {
    $scope.countries = {
        "AFG":{"name":"Afghanistan"},
        "ALB":{"name":"Albania"}};
        $scope.countriesKeys=Object.keys($scope.countries);
        $scope.selected="ALB";
  
        $scope.changeSelected = function(newSelected){
            $scope.selected=newSelected;
        }
});  
 <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<body ng-app="myApp">

  <div class="div1" ng-controller="MainCtrl">
    {{selected}}
    <select ng-options="key as value.name for (key, value) in countries" ng-change="changeSelected(selected)"  ng-model="selected"></select>
  </div>

</body>  

Ответ №3:

     var getKeyByValue = function( value,array1 ) {
for( var prop in array1 ) {
    if( array1.hasOwnProperty( prop ) ) {
         if( array1[ prop ] === value )
             return prop;
    }
}
  

Я добавил эту функцию в свой контроллер

 getKeyByValue($scope.selected,$scope.countries)
  

теперь у меня есть и значение, и ключ из <option>
Спасибо всем, кто пытался помочь
в основном моя проблема заключалась в том, что я добавил «элемент как value.name …»