Angular ui-select: как привязать только выбранное значение к ng-model
$scope.property = new Property();
$scope.property.propertyType = {};
$scope.propertyTypes = [
{ value: 'ResidentialPlot', name: 'Residential Plot' },
{ value: 'CommercialPlot', name: 'Commercial Plot' },
{ value: 'Apartment', name: 'Apartment/Flat' },
{ value: 'Townhouse', name: 'Townhouse' },
{ value: 'House', name: 'Single Family House' },
{ value: 'Commercial', name: 'Commercial Property' }
];
<label for="ptype" class="col-sm-2 control-label">Property Type</label>
<p>Populated: {{property.propertyType}}</p>
<ui-select ng-model="property.propertyType" id="ptype" theme="selectize" ng-disabled="disabled" style="width: 300px;" title="Choose Property Type">
<ui-select-match placeholder="Select a Property Type">{{$select.selected.value}}</ui-select-match>
<ui-select-choices repeat="propType in propertyTypes">
<span ng-bind-html="propType.name"></span>
<small ng-bind-html="propType.value"></small>
</ui-select-choices>
Это дает мне:
$scope.PropertyType = {"value":"Apartment","name":"Apartment/Flat"}
PropertyType в моей схеме - это просто строка, поэтому я хочу привязать выбранное значение вместо выбранного элемента JSON.
$scope.PropertyType = "Apartment"
Что мне следует привязать к моей ng-модели, чтобы получить это?
Ответы
Ответ 1
Вам нужно изменить в своем выбранном входе атрибут ng-model на selected_propertyType
и посмотреть его, когда он изменится, затем извлечь значение и назначить его propertyType
$scope.property = new Property();
$scope.property.propertyType = {};
$scope.propertyTypes = [
{ value: 'ResidentialPlot', name: 'Residential Plot' },
{ value: 'CommercialPlot', name: 'Commercial Plot' },
{ value: 'Apartment', name: 'Apartment/Flat' },
{ value: 'Townhouse', name: 'Townhouse' },
{ value: 'House', name: 'Single Family House' },
{ value: 'Commercial', name: 'Commercial Property' }
];
$scope.$watch('selected_propertyType',function(newValue,oldValue){
if (newValue && newValue!=oldValue){
$scope.propertyType = $scope.selected_propertyType.value;
}
})
<label for="ptype" class="col-sm-2 control-label">Property Type</label>
<p>Populated: {{property.selected_propertyType}}</p>
<ui-select ng-model="property.selected_propertyType" id="ptype" theme="selectize" ng-disabled="disabled" style="width: 300px;" title="Choose Property Type">
<ui-select-match placeholder="Select a Property Type">{{$select.selected.value}}</ui-select-match>
<ui-select-choices repeat="propType in propertyTypes">
<span ng-bind-html="propType.name"></span>
<small ng-bind-html="propType.value"></small>
</ui-select-choices>
Ответ 2
Вам не нужны $watch.
<ui-select ng-model="property.propertyType" id="ptype" theme="selectize" ng-disabled="disabled" style="width: 300px;" title="Choose Property Type">
<ui-select-match placeholder="Select a Property Type">{{$select.selected.value}}</ui-select-match>
<ui-select-choices repeat="propType.value as propType in propertyTypes track by $index | filter: $select.search">
<div ng-bind-html="propType.value | highlight: $select.search"></div>
</ui-select-choices>
Ответ 3
У меня была та же проблема. Я просмотрел документацию в:
https://github.com/angular-ui/ui-select/wiki/ui-select-choices
Лучший способ сделать это:
<ui-select ng-model="animal.names">
<ui-select-match>{{$select.selected.name}}</ui-select-match>
<ui-select-choices group-by="groupFind" repeat="value.id as value in animals | filter: $select.search">
<div ng-bind-html="value.name | highlight: $select.search"></div>
</ui-select-choices>
</ui-select>
Обратите внимание на то, как мы можем указать значение .id в repeat, все еще используя value.name для того, что показано в поле со списком. Это будет работать с установкой ng-модели на значение .id(все, что было сохранено).
Я подтвердил, что это работает для меня. Публикация здесь, потому что Google приводит людей на эту страницу.
Ответ 4
Вы можете использовать обозначение select as
:
repeat="propType as propType.value for propType in propertyTypes"