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 相关文章推荐
一个很简单的jquery+xml+ajax的无刷新树结构(无css,后台是c#)
Jun 02 Javascript
基于jquery的关于动态创建DOM元素的问题
Dec 24 Javascript
JavaScript比较两个对象是否相等的方法
Feb 06 Javascript
深入理解JavaScript系列(37):设计模式之享元模式详解
Mar 04 Javascript
jQuery实现点击小图片淡入淡出显示大图片特效
Sep 09 Javascript
js绑定事件和解绑事件
Apr 27 Javascript
JS实现按钮控制计时开始和停止功能
Jul 27 Javascript
vue Element-ui input 远程搜索与修改建议显示模版的示例代码
Oct 19 Javascript
javaScript和jQuery自动加载简单代码实现方法
Nov 24 jQuery
基于js文件加载优化(详解)
Jan 03 Javascript
vue下的@change事件的实现
Oct 25 Javascript
node.js爬虫框架node-crawler初体验
Oct 29 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
在IIS7.0下面配置PHP 5.3.2运行环境的方法
2010/04/13 PHP
CI(CodeIgniter)框架配置
2014/06/10 PHP
初识Laravel
2014/10/30 PHP
php+ajax实时刷新简单实例
2015/02/25 PHP
Smarty变量用法详解
2016/05/11 PHP
Thinkphp 框架扩展之行为扩展原理与实现方法分析
2020/04/23 PHP
js制作的鼠标悬浮时产生的下拉框效果
2012/10/27 Javascript
javascript中简单的进制转换代码实例
2013/10/26 Javascript
利用javascript实现禁用网页上所有文本框,下拉菜单,多行文本域
2013/12/14 Javascript
JSP中使用JavaScript动态插入删除输入框实现代码
2014/06/13 Javascript
moment.js轻松实现获取当前日期是当年的第几周
2015/02/05 Javascript
jQuery实现响应鼠标滚动的动感菜单效果
2015/09/21 Javascript
JS实现图片上传预览功能
2016/11/21 Javascript
AngularJs上传前预览图片的实例代码
2017/01/20 Javascript
webpack进阶——缓存与独立打包的用法
2017/08/02 Javascript
JS实现移动端判断上拉和下滑功能
2017/08/07 Javascript
jQuery实现简单QQ聊天框
2020/08/27 jQuery
详解JavaScript中new操作符的解析和实现
2020/09/04 Javascript
微信小程序对图片进行canvas压缩的方法示例详解
2020/11/12 Javascript
[01:11]辉夜杯战队访谈宣传片—CDEC.Y
2015/12/26 DOTA
[54:10]完美世界DOTA2联赛PWL S2 Magma vs FTD 第二场 11.29
2020/12/03 DOTA
Python中使用摄像头实现简单的延时摄影技术
2015/03/27 Python
Python下的常用下载安装工具pip的安装方法
2015/11/13 Python
对Python 3.5拼接列表的新语法详解
2018/11/08 Python
python+pyqt5实现图片批量缩放工具
2019/03/18 Python
Django多进程滚动日志问题解决方案
2019/12/17 Python
Selenium常见异常解析及解决方案示范
2020/04/10 Python
澳大利亚排名第一的狂热牛仔品牌:ONETEASPOON
2018/11/20 全球购物
DOUGLAS荷兰:购买香水和化妆品
2020/10/24 全球购物
九年级英语教学反思
2014/01/31 职场文书
揭牌仪式主持词
2014/03/19 职场文书
网络舆情信息简报
2015/07/21 职场文书
2016年教师节慰问信
2015/12/01 职场文书
大学学生会主席竞选稿怎么写?
2019/08/19 职场文书
mysql 子查询的使用
2022/04/28 MySQL
MySQL如何修改字段类型和字段长度
2022/06/10 MySQL