Подтвердить что ты не робот

AngularJS: привязанный к данным модальный - сохранение изменений только при нажатии кнопки "Сохранить" или забывании изменений при нажатии "Отмена"

У меня есть список элементов, и после нажатия на один из элементов отображается модальное диалоговое окно, позволяющее пользователю внести некоторые изменения и нажать "Закрыть" или "Сохранить изменения".

Проблема заключается в том, что пользователь делает некоторые изменения и нажимает на "Закрыть", изменения были бы отражены в модели, с которой связано представление, поскольку привязка данных мгновенная.

Мой вопрос в том, как мне либо отложить обновления, и выполнить привязку только при нажатии "Сохранить изменения", либо как-то забыть об изменениях, если нажата "Отмена".

Код моего модального диалога выглядит так:

<div ui-modal class="fade static" ng-model="modalShown" id="myModal" data-backdrop="static">
        <div class="modal-header">
            <button type="button" class="close" ng-click="closeModal()" aria-hidden="true">&times;</button>
            <h3>{{selectedClientFeature.feature.type}}</h3>
        </div>
        <div class="modal-body">    
            <ul class="unstyled columnlist">
                <li ng-repeat="country in countriesForEdit">
                    <input type="checkbox" ng-model="country.selected"> {{country.name}}
                </li>
            </ul>
        </div>
        <div class="modal-footer">
            <a ng-click="closeModal()" class="btn">Close</a>
            <a ng-click="saveChanges()" class="btn btn-primary">Save changes</a>
        </div>
    </div>

Спасибо, Shaun

4b9b3361

Ответ 1

Угловой doc использовать, чтобы иметь пример именно этой ситуации. Вам нужно будет клонировать вашу модель (см. angular.copy) перед показом вашего модального редактирования, и когда пользователь нажимает на closeModal(), вы переназначаете свой модели к клонированному значению. IMHO, я бы переименовал вашу кнопку "Закрыть" в "Отменить" и поместил ее справа от "Сохранить изменения", это более явное и похоже, что многие сайты работают.

Надеюсь, что это поможет

- дан

Ответ 2

Чтобы автоматизировать ручную модель клонирования/обновления, я придумал директиву lazy-model.
См. fooobar.com/info/86488/...