#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 …»