Сопоставить значения массива ng-модели с объектом ng-options для выбранных параметров

#angularjs #components #multi-select #bootstrap-multiselect

#angularjs #Компоненты #множественный выбор #bootstrap-множественный выбор

Вопрос:

У меня есть следующие значения:

 campaign_sms_templates = [11,22];
  

и

 templateSMSList = [
{"id":11, "name":"test"},
{"id":12, "name":"test 12"},
{"id":22, "name":"test 22"}
];
  

И код angular похож на:

 <select multiple="multiple"
   ng-model="campaign_sms_templates"
   ng-options="value as value.name for value in templateSMSList track by value.id">
</select>
  

Но значения не выбираются при рендеринге. Когда я изменяю campaign_sms_templates значения параметров с:

 campaign_sms_templates = [ {"id":11}, {"id":22} ];
  

Он работает по мере совпадения объектов и при рендеринге отображает выбранные значения.

Кто-нибудь может помочь, как я могу отобразить выбранные параметры, используя эти значения:

 campaign_sms_templates = [11,22];
  

Пожалуйста, дайте мне знать, если что-то нуждается в дополнительных разъяснениях.

Комментарии:

1. что ж, select работает именно так, не возражаете ли вы сопоставить свой массив с массивом объектов, прежде чем привязываться к view .

2. спасибо @supercool, только что решил проблему, потратив на это много часов: (пожалуйста, проверьте и поделитесь своим отзывом.

Ответ №1:

Потратив много времени на это, теперь, наконец, я решил эту проблему

 <select multiple="multiple" ng-change="save(campaign_sms_templates)" ng-model="campaign_sms_templates">
    <option value=[[field.id]] ng-repeat="field in templateSMSList" ng-selected="campaign_sms_templates.indexOf(field.id)!==-1">[[field.name]]</option>
</select>
  

Это кажется не очень хорошей практикой, но поскольку я хочу сохранять идентификаторы только в своих документах базы данных, я сделал это.

Приветствуются любые отзывы.

Ответ №2:

Использовать value.id as value.name for value :

 <select multiple="multiple"
   ng-model="campaign_sms_templates"
   ng-options="value.id as value.name for value in templateSMSList">
</select>
  

Также не используйте track by expression , поскольку это не нужно и приведет к нарушению директивы.

Для получения дополнительной информации см.