注意:这不是关于使用 AngularJS 显示模态对话框,该主题有很多问题和答案!
这个问题是关于如何在页面上的模式对话框中对 OK 和 Cancel 做出反应。假设你有一个只有一个变量的作用域:
$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本身添加了它?
编辑:似乎有一个不同方式的例子可能是为了。
主.js:
$scope.filename = "panorama.jpg";
$scope.description = "A panorama of the mountains.";
$scope.persist = function () { // Some function to hit a back end service. };
主.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 个模式一遍又一遍地完成这项工作吗?还是我疯了?