Angular 2 ngForm中的ngModel、[ngModel]和[(ngModel)]的写法


Posted in Javascript onJune 29, 2017

“对呀对呀!……回字有四样写法,你知道么?”,当时鲁大大如此讽刺孔乙己,意味着老孔这个被科举制毒害的人注意此种无用之物实在可悲。但是在Angular 2的世界中,很少存在无用之物,ngModel有三种写法,你知道吗?

表单的设计永远都是应用的重头戏,而其中最基本的功能点即是通过一个个输入组件实现的,为此Angular 2为我们提供了锋利的武器:ngModel。而其不同的使用方式有着大不相同的作用:

ngModel

如果单独使用ngModel,且没有为其赋值的话,它会在其所在的ngForm.value对象上添加一个property,此property的key值为ngModel所在组件设置的name属性的值:

<form novalidate #f="ngForm">
 <input type='text' name='userName' placeholder='Input your userName' ngModel>
</form>
<p>
 {{ f.value | json }} // { "userName": "" }
</p>

此时需要注意的是,单独使用ngModel时,如果没有为ngModel赋值的话,则必须存在name属性。

也就是说,单独ngModel的作用是通知ngForm.value,我要向你那里加入一个property,其key值是组件的name属性值,其value为空字符串。

[ngModel]

可是,如果想向ngForm中添加一个有默认值的property需要怎么做呢?这时就需要使用单向数据绑定的格式了,也就是[ngModel]:

this.model = {
 userName: 'Casear'
};

<form novalidate #f="ngForm">
 <input type='text' name='userName' placeholder='Input your userName' [ngModel]='model.userName'>
</form>
<p>
 {{ f.value | json }} // { "userName": "Casear" }
 {{ model | json }}  // { "userName": "Casear" },不会随着f.value的变化而变化
</p>

这里我们使用了单向数据绑定的特点,可以为ngForm.value添加一个带有初始值的property。

注意单向数据绑定的特点,此时在表单输入框中做的任何改变都不会影响model中的数据,也就是说this.model.userName不会随着输入框的改变而改变。不过输入框改变会体现在f.value中。

[(ngModel)]

上述的单向数据绑定在单纯地提供初始值很有用,不过总是有些场景需要将用户输入体现在我们的model上,此时就需要双向数据绑定了,也即[(ngModel)]:

this.model = {
 userName: 'Casear'
};

<form novalidate #f="ngForm">
 <input type='text' name='userName' placeholder='Input your userName' [(ngModel)]='model.userName'>
</form>
<p>
 {{ f.value | json }} // { "userName": "Casear" }
 {{ model | json }}  // { "userName": "Casear" },会随着f.value的变化而变化
</p>

这里我们不仅为ngForm.value添加了一个带有初始值的property,还能实现Model和View层的联动,尽管这种方式可能并不好,但是在某些情况下也不失为一种简便的方案。

关于[(ngModel)]的内部逻辑可查看Angular 2 父子组件数据通信。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
html下载本地
Jun 19 Javascript
javascript 浏览器判断 绑定事件 arguments 转换数组 数组遍历
Jul 06 Javascript
node.js中的require使用详解
Dec 15 Javascript
JavaScript通过事件代理高亮显示表格行的方法
May 27 Javascript
jquery实现下拉框左右选择功能
Feb 21 Javascript
详解如何使用Vue2做服务端渲染
Mar 29 Javascript
JS基于正则实现数字千分位用逗号分隔的方法
Jun 16 Javascript
使用vue如何构建一个自动建站项目
Feb 05 Javascript
解决vue-cli创建项目的loader问题
Mar 13 Javascript
详解Vue.directive 自定义指令
Mar 27 Javascript
JavaScript 反射和属性赋值实例解析
Oct 28 Javascript
在JavaScript中实现链式调用的实现
Dec 24 Javascript
JavaScript之iterable_动力节点Java学院整理
Jun 29 #Javascript
JavaScript之Map和Set_动力节点Java学院整理
Jun 29 #Javascript
JavaScript之面向对象_动力节点Java学院整理
Jun 29 #Javascript
JavaScript之json_动力节点Java学院整理
Jun 29 #Javascript
JavaScript之RegExp_动力节点Java学院整理
Jun 29 #Javascript
详解微信小程序设置底部导航栏目方法
Jun 29 #Javascript
详解vue2父组件传递props异步数据到子组件的问题
Jun 29 #Javascript
You might like
用libTemplate实现静态网页的生成
2006/10/09 PHP
PHP中对数据库操作的封装
2006/10/09 PHP
php生成RSS订阅的方法
2015/02/13 PHP
javascript 限制输入脚本大全
2009/11/03 Javascript
js获取图片大小的函数代码
2011/09/20 Javascript
修复IE9&amp;safari 的sort方法
2011/10/21 Javascript
js字符编码函数区别分析
2011/12/28 Javascript
js汉字转拼音实现代码
2013/02/06 Javascript
关于js注册事件的常用方法
2013/04/03 Javascript
JS实现一键回顶功能示例代码
2013/10/28 Javascript
Jquery 改变radio/checkbox选中状态,获取选中的值(示例代码)
2013/12/12 Javascript
js如何判断用户是在PC端和还是移动端访问
2014/04/24 Javascript
javascript通过获取html标签属性class实现多选项卡的方法
2015/07/27 Javascript
Bootstrap每天必学之附加导航(Affix)插件
2016/04/25 Javascript
Bootstrap Paginator分页插件使用方法详解
2016/05/30 Javascript
JS实现的多张图片轮流播放幻灯片效果
2016/07/22 Javascript
简洁实用的BootStrap jQuery手风琴插件
2016/08/31 Javascript
jQuery插件FusionCharts绘制2D双折线图效果示例【附demo源码】
2017/04/14 jQuery
JavaScript实现学生在线做题计时器功能
2018/12/05 Javascript
layui点击弹框页面 表单请求的方法
2019/09/21 Javascript
解决Vue keep-alive 调用 $destory() 页面不再被缓存的情况
2020/10/30 Javascript
详解Python的Django框架中的templates设置
2015/05/11 Python
python设计tcp数据包协议类的例子
2019/07/23 Python
opencv调整图像亮度对比度的示例代码
2019/09/27 Python
python logging添加filter教程
2019/12/24 Python
Python开发之基于模板匹配的信用卡数字识别功能
2020/01/13 Python
Tensorflow中tf.ConfigProto()的用法详解
2020/02/06 Python
Windows10+anacond+GPU+pytorch安装详细过程
2020/03/24 Python
Pycharm中安装wordcloud等库失败问题及终端通过pip安装的Python库如何添加到Pycharm解释器中(推荐)
2020/05/10 Python
利用python对mysql表做全局模糊搜索并分页实例
2020/07/12 Python
Python Django路径配置实现过程解析
2020/11/05 Python
AmazeUI 列表的实现示例
2020/08/17 HTML / CSS
Expedia意大利旅游网站:酒店、机票和租车预订
2017/10/30 全球购物
物业消防安全责任书
2014/07/23 职场文书
迎新年主持词
2015/07/06 职场文书
干货:我将这样书写我的演讲稿!
2019/05/09 职场文书