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

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

campaign_sms_templates = [11,22];

и

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

И угловой код похож на:

<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];

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

Ответы [ 2 ]

0 голосов
/ 25 марта 2019

Использование 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, так как он не нужен и нарушит директиву.

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

0 голосов
/ 25 марта 2019

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

<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>

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

Любые отзывы приветствуются.

...