Примечание: речь идет не о показе модального диалога с AngularJS, в этой теме есть много вопросов и ответов!
Этот вопрос касается того, как реагировать как на ОК, так и на Отмена в рамках модального диалога на странице. Скажем, у вас есть область с одной переменной в ней:
$scope.description = "Oh, how I love porcupines..."
Если я предоставляю вам модальный диалог на странице и использую ng-model = "description" в этом диалоговом окне, все сделанные вами изменения фактически выполняются в реальном времени для самого описания при вводе. Это плохо, потому что тогда как вы отменяете этот диалог?
Вот этот вопрос, который говорит, чтобы делать то, что я объясняю ниже. Принятый для него ответ - это то же самое "решение", которое я придумал: AngularJS: привязанный к данным модальный - сохранение изменений только тогда, когда "Сохранить" щелкнуть или забыть изменения, если "Отменить" щелчок
Я вижу, как это сделать, если щелкнуть по кнопке, чтобы вызвать модальный, возвращается функция обратно в спину и создает временную копию соответствующих данных для модального, а затем всплывает модальный. Затем "ОК" (или "Сохранить" или что-то еще) может скопировать временные значения в фактические значения модели.
main.js(выдержка):
$scope.descriptionUncommitted = $scope.description;
$scope.commitChanges = function () {
$scope.description = $scope.descriptionUncommitted;
}
main.html(выдержка):
<input type="text" ng-model="descriptionUncommitted"/>
<button ng-click="commitChanges()">Save</button>
Проблема с этим не декларативная! Фактически, это ничто иное как AngularJS нигде. Это почти так, как будто нам нужно ng-model-uncommitted = "description", где они могли бы делать все изменения, которые они хотят, но они только фиксируются, когда мы запускаем с другим объявлением. Есть ли что-то в плагине где-то или есть сам AngularJS?
Изменить: Кажется, что пример другого способа сделать это может быть в порядке.
main.js:
$scope.filename = "panorama.jpg";
$scope.description = "A panorama of the mountains.";
$scope.persist = function () { // Some function to hit a back end service. };
main.html:
<form>
<input type="text" ng-model-uncommitted="filename"/>
<input type="text" ng-model-uncommitted="description"/>
<button ng-commit ng-click="persist()">Save</button>
<button ng-discard>Cancel</button>
</form>
Я привязал к нему тег формы, потому что я не знаю, как бы вы группировали элементы, поэтому было ясно, что все это часть одной и той же "транзакции" (из-за отсутствия лучшего слова). Но должно быть каким-то образом, что это может произойти автоматически, и клонированные копии переменных модели используются для начальных значений, используются для ввода и обновления автоматически, проверены и т.д., А затем окончательно отбрасываются или копируются в одно и то же значение, которое первоначально был использован для их создания, если пользователь решил совершить.
Разве это не так проще, чем код в контроллере, чтобы делать эту работу снова и снова для 20 модалов на большом веб-сайте? Или я орехи?