#javascript #jquery #angularjs #google-chrome-extension
#angularjs #выпадающее меню #angular-ngmodel #выбранный
Вопрос:
Я использую Angular JS, и мне нужно установить выбранный параметр элемента управления выпадающего списка с помощью angular JS. Простите меня, если это смешно, но я новичок в Angular JS
Вот элемент управления выпадающим списком моего html
<select ng-required="item.id==8 amp;amp; 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;amp;amp; item.quantity amp;> 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"
выбора?
Комментарии:
1.
<option value="0" ng-selected="true">set of 6 traits</option>
Ответ №1:
Надеюсь, я понял ваш вопрос, но ng-model
директива создает двустороннюю привязку между выбранным элементом в элементе управления и значением item.selectedVariant
. Это означает, что изменение item.selectedVariant
в JavaScript или изменение значения в элементе управления обновляет другое. Если 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» останется выбранным.
Комментарии:
1. У меня есть файл контроллера с именем order.js , таким образом, html-имя то же самое order.html где находится контроль. Должен ли я установить selectedVariant там или непосредственно в элементе управления?
2. Обычно вы устанавливаете эти параметры в контроллере в
$scope
переменной. Итак, предполагая, что вы находитесь в одной области, в вашем контроллере вы могли бы сказать$scope.item.selectedVariant = 0
, чтобы установить выбранное значение по умолчанию. Вы также можете установить переменную непосредственно в элементе управления в HTML, используя директиву ng-init , но, на мой взгляд, это довольно запутанно!3. Не могли бы вы подробнее рассказать о том, что
variants
находится в вашей области? Вам нужно будет установитьitem.selectedVariant
точно в элементvariants
.4. $scope.item.selectedVariant = 0; это приведет к разрыву страницы, если я помещу ее в файл контроллера
5. не могли бы вы предоставить синтаксис с помощью ng-init, пожалуйста?
Ответ №2:
Я не знаю, поможет ли это кому-нибудь или нет, но поскольку я столкнулся с той же проблемой, я подумал поделиться тем, как я получил решение.
Вы можете использовать атрибут track by в своем ng-options
.
Предположим, что у вас есть:
variants:[{'id':0, name:'set of 6 traits'}, {'id':1, name:'5 complete sets'}]
Вы можете указать свой ng-options
as:
ng-options="v.name for v in variants track by v.id"
Надеюсь, это поможет кому-то в будущем.
Комментарии:
1. Да! наконец-то! Спасибо
2. Отлично. Мне не хватало трека, чтобы динамически делать это.
3. Наконец-то! Моя проблема решена путем добавления track by. Спасибо
4. Это то, чего мне не хватало! Я устанавливал поле области видимости, которое было привязано к
ngModel
правильному, но оно не работало, пока я не добавилtrack by
! Спасибо!
Ответ №3:
Если вы присвоите значение 0 item.selectedVariant
, оно должно быть выбрано автоматически. Ознакомьтесь с примером на http://docs.angularjs.org/api/ng.directive:select который выбирает красный цвет по умолчанию простым назначением $scope.color='red'
.
Комментарии:
1. где мне установить параметр item.selectedVariant? если я определю $scope.item.selectedVariant = 0; в контроллере файла angular распадается
2. не могли бы вы также вставить соответствующий html?
3. Я думаю, что для каждого элемента в orderGrid должен быть установлен selectedVariant равный 0
4. можете ли вы предоставить пример кода? Я не знаком с angular извините
Ответ №4:
я вижу, что здесь уже были написаны хорошие ответы, но когда-нибудь может быть полезно написать то же самое в другой форме
<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>
Комментарии:
1. Что, если бы у меня был выпадающий список с несколькими вариантами выбора. Простая установка идентификаторов в модели не работает
Ответ №5:
Простой способ
Если у вас есть Users в качестве ответа или заданный вами массив / JSON, сначала вам нужно установить выбранное значение в controller, затем вы вводите то же имя модели в 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>
Ответ №6:
Это может быть полезно. Привязки дозируют не всегда.
<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>
Например. Вы заполняете исходную модель списка опций из rest-сервиса. Выбранное значение было известно для заполнения списка и было установлено. После выполнения rest-запроса с опцией списка $http будет выполнено. Но выбранный параметр не установлен. По неизвестным причинам AngularJS в shadow $digest, выполняющий привязку, не выбран, как это должно быть. Я должен использовать jQuery для установки выбранного. Это важно! Angular в shadow добавляет префикс к значению attr «value» для сгенерированных с помощью ng-repeat optinos. Для 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);
}
});
}
Ответ №7:
Попробуйте следующее:
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>
Комментарии:
1. Уже есть хорошее решение, которое работает и было принято OP, что оно решает его проблему.
Ответ №8:
Это код, который я использовал для установки выбранного значения
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>
попробуйте это на angular framework
Ответ №9:
JS:
$scope.options = [
{
name: "a",
id: 1
},
{
name: "b",
id: 2
}
];
$scope.selectedOption = $scope.options[1];