AngularJS и select-options
Попробуйте использовать ng-options
AngularJS ngOptions директива внутри самого элемента select
.Тогда вам не нужно добавлять каждый option
элемент самостоятельно, используя ng-repeat
.
Уточнение
Атрибут title принадлежит select -элемент и покажет, если вы наводите курсор мыши на выбранный элемент.Вы хотите, чтобы заголовок раскрыл текущий выбранный параметр ?Правильно ли я вас понял?
Как показать option.Brand.Name
как title
поля select
Любопытно, откуда это detail.ProductId
?Выбран ли бренд по идентификатору продукта (см. Ваш код)?
ng-selected = "option.Id === detail.ProductId"
Пространство решения
Ваши требования / ограничения:
- без использования JavaScript (возможно, потому что вы не можете изменить источники)
- безизменение ng-модели (потому что вам нужно только
BrandId
по некоторым причинам базы данных)
Так как title элемента select не имеетДоступ к опциям внутри, единственный способ установить его в зависимости от текущего выбора, т.е. ваш detail.BrandId
.Таким образом, title
может устанавливаться только динамически (в зависимости от текущего выбора) с использованием стандартных угловых средств, таких как:
Ожидаемое поведение
Единственная переменная области действия, измененная при выборе, указывается в ng-model
выбора как detail.BrandId
.Это будет установлено, когда пользователь выбирает option
для его свойства BrandId
.Когда пользователь выбирает один из вариантов, он будет виден с меткой BrandName
.После выбора это BrandName
(метка опции) должно отображаться как заголовок всего элемента select.
Так что нам нужно получить от detail.BrandId
( selected ng-model) к связанным параметрам BrandName
(как это должно отображаться в заголовке).
Возможное решение
Единственный способ - использовать стандартные угловые выражения / filters / array-indexing дляполучить всю опцию по выбранному detail.BrandId
(модель ng)
Тогда мы можем поиск option.BrandName
по этому уравнению после выбранного detail.BrandId === option.BrandId
var app = angular.module('app', []);
app.controller('mainCtrl', function($scope){
$scope.products = [
{Id: 0, name: 'Watson', brandId: 1, brandName:"IBM"},
{Id: 1, name: 'DB2', brandId: 1, brandName:"IBM"},
{Id: 2, name: 'Windows', brandId: 2, brandName: "Microsoft"},
{Id: 3, name: 'Office', brandId: 2, brandName: "Microsoft"}
];
$scope.detail = { ProductId: 3, BrandId: null };
});
<!DOCTYPE html>
Product IdProduct NameChoose BrandBrand Id
{{detail.ProductId}}
{{ (products | filter: {Id: detail.ProductId})[0].name }}
{{detail.BrandId}}
Product is predefined. So the brand is pre-selected by product. BUT: after brand is selected, the product-details do NOT change!
Selected detail:
{{detail | json}}
См. Также
Для использования ng-options ,см. также пример plunkr .