在模态窗口中操作angular模型的一种惯用方法
2014-03-17 20:01
302 查看
用angular开发一个表单,通常的做法是将form绑定到一个模型上。这样编辑字段的同时,也就改变了模型。最后提交时,无论是写入数据库,还是提交http请求,只要操作此模型即可
但是也有另一种交互场景:编辑某字段时,弹出一个新的模态窗口。在窗口内进行的操作(比如从列表中选取一些项),只有点击确定之后,才算真正对该字段进行了编辑。如果点击取消,或者直接关闭模态窗口,则此字段不应该发生变化。在这种场景下,单模型的方式就不能用了。因为在模态窗口内做的操作,不应该对模型直接造成修改
这2天做了几个这种场景,总结了一种惯用的方法:
1、应该有一个最终模型A,绑定到表单上,对应最后的提交动作。还需要一个临时模型B,用来对应在模态窗口内的操作
2、在初始化模态窗时,将模型A赋值给模型B:
3、模态窗口中的各种操作,都赋值给模型B
4、如果直接关闭模态窗口,或是点击取消,则不需要做任何事。这样下次重新打开模态窗口时,模型B仍然是正确的值
5、如果点击确定,则将模型B赋值给模型A:
6、最后提交表单时,取模型A的值
以上的步骤,可以适用于有模态选择框的交互场景。总的来说,页面中存在多少个交互层次,就需要多少个模型
但是也有另一种交互场景:编辑某字段时,弹出一个新的模态窗口。在窗口内进行的操作(比如从列表中选取一些项),只有点击确定之后,才算真正对该字段进行了编辑。如果点击取消,或者直接关闭模态窗口,则此字段不应该发生变化。在这种场景下,单模型的方式就不能用了。因为在模态窗口内做的操作,不应该对模型直接造成修改
这2天做了几个这种场景,总结了一种惯用的方法:
1、应该有一个最终模型A,绑定到表单上,对应最后的提交动作。还需要一个临时模型B,用来对应在模态窗口内的操作
2、在初始化模态窗时,将模型A赋值给模型B:
function refreshSelectedServiceCatesTemp(){ $scope.selectServiceCatesTemp = _.clone($scope.currentSelectServiceCates.services); }
3、模态窗口中的各种操作,都赋值给模型B
4、如果直接关闭模态窗口,或是点击取消,则不需要做任何事。这样下次重新打开模态窗口时,模型B仍然是正确的值
5、如果点击确定,则将模型B赋值给模型A:
$scope.currentSelectServiceCates = _.clone($scope.selectServiceCatesTemp);
6、最后提交表单时,取模型A的值
以上的步骤,可以适用于有模态选择框的交互场景。总的来说,页面中存在多少个交互层次,就需要多少个模型
相关文章推荐
- SDL2.0在mfc窗口中显示yuv的一种方法
- VB6.0代码窗口不支持鼠标中键操作滚动条解决方法
- html窗口与其iframe子窗口之间的方法操作
- MFC中将窗口最小化到托盘的一种方法
- Java操作Excel的一种方法
- Java操作Excel的一种方法
- JS子父窗口互相操作取值赋值的方法介绍
- 在IE模态窗口中自由查看HTML源码的方法
- Veins中实现Nakagami-m信道模型(一种简单的方法)
- SDL2.0在mfc窗口中显示yuv的一种方法
- JS子父窗口互相操作取值赋值的方法介绍
- JS模态窗口返回值兼容问题的完美解决方法
- .NET20 一种简单的窗口控件UI状态控制方法
- VTK修炼之道52:图形基本操作进阶_多分辨率策略(模型抽取的三种方法)
- java操作Excel的一种方法
- Angular操作cookies方法
- 模态窗口其实就是在当前窗口调用系统的消息循环,响应用户的操作,将相关的消息发送到对应的窗口(转)
- java操作Excel的一种方法
- PB中协调多数据窗口数据操纵的一种解决方法
- 关于cxGrid选中行操作关联数据集的一种方法