Как использовать параметр ng для установки значения по умолчанию для элемента select
Я видел документацию директивы select Angular здесь: http://docs.angularjs.org/api/ng.directive:select.
Я не могу понять, как установить значение по умолчанию. Это путает:
выберите в качестве метки для значения в массиве
Вот объект:
{
"type": "select",
"name": "Service",
"value": "Service 3",
"values": [ "Service 1", "Service 2", "Service 3", "Service 4"]
}
html (рабочий):
<select><option ng-repeat="value in prop.values">{{value}}</option></select>
а затем я пытаюсь добавить атрибут ng-option внутри элемента select, чтобы установить prop.value
как параметр по умолчанию (не работает).
ng-options="(prop.value) for v in prop.values"
Что я делаю неправильно?
Ответы
Ответ 1
Итак, предположим, что объект находится в вашей области:
<div ng-controller="MyCtrl">
<select ng-model="prop.value" ng-options="v for v in prop.values">
</select>
</div>
function MyCtrl($scope) {
$scope.prop = {
"type": "select",
"name": "Service",
"value": "Service 3",
"values": [ "Service 1", "Service 2", "Service 3", "Service 4"]
};
}
Рабочий Plunkr: http://plnkr.co/edit/wTRXZYEPrZJRizEltQ2g
Ответ 2
Документация angular для выбора * не отвечает на этот вопрос явно, но она есть. Если вы посмотрите на script.js
, вы увидите следующее:
function MyCntrl($scope) {
$scope.colors = [
{name:'black', shade:'dark'},
{name:'white', shade:'light'},
{name:'red', shade:'dark'},
{name:'blue', shade:'dark'},
{name:'yellow', shade:'light'}
];
$scope.color = $scope.colors[2]; // Default the color to red
}
Это html:
<select ng-model="color" ng-options="c.name for c in colors"></select>
Это, по-видимому, более очевидный способ дефолта выбранного значения на <select>
с ng-options
. Также он будет работать, если у вас есть разные метки/значения.
*
Это от Angular 1.2.7
Ответ 3
Этот ответ более полезен, когда вы приносите данные из БД, вносите изменения и затем сохраняете изменения.
<select ng-options="opt.id as opt.name for opt in users" ng-model="selectedUser"></select>
Посмотрите пример здесь:
http://plnkr.co/edit/HrT5vUMJOtP9esGngbIV
Ответ 4
<select name='partyid' id="partyid" class='span3'>
<option value=''>Select Party</option>
<option ng-repeat="item in partyName" value="{{item._id}}" ng-selected="obj.partyname == item.partyname">{{item.partyname}}
</option>
</select>
Ответ 5
Если ваш массив объектов сложный, например:
$scope.friends = [{ name: John , uuid: 1234}, {name: Joe, uuid, 5678}];
И ваша текущая модель была настроена на что-то вроде:
$scope.user.friend = {name:John, uuid: 1234};
Это помогло использовать функцию track by
на uuid (или любом уникальном поле), если у ng-model = "user.friend" также есть uuid:
<select ng-model="user.friend"
ng-options="friend as friend.name for friend in friends track by friend.uuid">
</select>
Ответ 6
Я боролся с этим в течение нескольких часов, поэтому я хотел бы добавить некоторые пояснения к нему, все примеры, отмеченные здесь, относятся к случаям, когда данные загружаются из самого script, а не из того, что происходит от службе или базе данных, поэтому я хотел бы предоставить свой опыт для тех, кто имеет ту же проблему, что и я.
Обычно вы сохраняете только идентификатор нужного параметра в своей базе данных, поэтому... пусть покажет его
<я > service.js
myApp.factory('Models', function($http) {
var models = {};
models.allModels = function(options) {
return $http.post(url_service, {options: options});
};
return models;
});
<я > controller.js
myApp.controller('exampleController', function($scope, Models) {
$scope.mainObj={id_main: 1, id_model: 101};
$scope.selected_model = $scope.mainObj.id_model;
Models.allModels({}).success(function(data) {
$scope.models = data;
});
});
Наконец, частичный html model.html
Model: <select ng-model="selected_model"
ng-options="model.id_model as model.name for model in models" ></select>
В принципе, я хотел указать ту часть " model.id_model как model.name для модели в моделях". " model.id_model" использует идентификатор модели для значение, которое вы можете сопоставить с " mainObj.id_model", который также является " selected_model", это просто равное значение, также " в качестве модели .name" - это метка для ретранслятора, наконец, модель в моделях" - это всего лишь регулярный цикл, о котором мы все знаем.
Надеюсь, это поможет кому-то, и если да, пожалуйста, проголосуйте: D
Ответ 7
<select id="itemDescFormId" name="itemDescFormId" size="1" ng-model="prop" ng-change="update()">
<option value="">English(EN)</option>
<option value="23">Corsican(CO)</option>
<option value="43">French(FR)</option>
<option value="16">German(GR)</option>
Просто добавьте опцию с пустым значением. Он будет работать.
DEMO Plnkr
Ответ 8
Более простой способ сделать это - использовать data-ng-init следующим образом:
<select data-ng-init="somethingHere = options[0]" data-ng-model="somethingHere" data-ng-options="option.name for option in options"></select>
Основное отличие здесь в том, что вам нужно включить data-ng-model
Ответ 9
Атрибут ng-model устанавливает выбранную опцию, а также позволяет пропустить фильтр, например orderBy: orderModel.value
index.html
<select ng-model="orderModel" ng-options="option.name for option in orderOptions"></select>
controllers.js
$scope.orderOptions = [
{"name":"Newest","value":"age"},
{"name":"Alphabetical","value":"name"}
];
$scope.orderModel = $scope.orderOptions[0];
Ответ 10
Если кто-то использует значение по умолчанию, которое иногда не заполняется на странице в Chrome, IE 10/11, Firefox - попробуйте добавить этот атрибут в поле ввода/выбора, проверяя заполненную переменную в HTML, например
<input data-ng-model="vm.x" data-ng-if="vm.x !== '' && vm.x !== undefined && vm.x !== null" />
Ответ 11
Это действительно просто, если вы не заботитесь об индексации своих опций с каким-либо числовым идентификатором.
-
Объявите свой $ scope var - people array
$scope.people= ["", "YOU", "ME"];
-
В DOM вышеуказанного объема создайте объект
<select ng-model="hired" ng-options = "who for who in people"></select>
-
В вашем контроллере вы устанавливаете свою ng-модель как "нанятую".
$scope.hired = "ME";
Удачи!!! Это действительно легко!
Ответ 12
Просто чтобы сложить, я сделал что-то вроде этого.
<select class="form-control" data-ng-model="itemSelect" ng-change="selectedTemplate(itemSelect)" autofocus>
<option value="undefined" [selected]="itemSelect.Name == undefined" disabled="disabled">Select template...</option>
<option ng-repeat="itemSelect in templateLists" value="{{itemSelect.ID}}">{{itemSelect.Name}}</option></select>