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 相关文章推荐
需要做特殊处理的DOM元素属性的访问
Nov 05 Javascript
基于js实现二级下拉联动
Dec 17 Javascript
基于jQuery实现咖啡订单管理简单应用
Feb 10 Javascript
网页中的图片查看器viewjs使用方法
Jul 11 Javascript
iscroll动态加载数据完美解决方法
Jul 18 Javascript
JavaScript实现简单生成随机颜色的方法
Sep 21 Javascript
对Vue.js之事件的绑定(v-on: 或者 @ )详解
Sep 15 Javascript
Vue中Quill富文本编辑器的使用教程
Sep 21 Javascript
Node.js从字符串生成文件流的实现方法
Aug 18 Javascript
vue 取出v-for循环中的index值实例
Nov 09 Javascript
Javascript异步流程控制之串行执行详解
Sep 27 Javascript
JavaScript实现复选框全选功能
Apr 11 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
咖啡与水的关系
2021/03/03 冲泡冲煮
Ubuntu中支持PHP5与PHP7双版本的简单实现
2018/08/19 PHP
jquery autocomplete自动完成插件的的使用方法
2010/08/07 Javascript
判断对象是否Window的实现代码
2012/01/10 Javascript
JavaScript基础篇之变量作用域、传值、传址的简单介绍与实例
2013/06/29 Javascript
jquery 新建的元素事件绑定问题解决方案
2014/06/12 Javascript
告诉你什么是javascript的回调函数
2014/09/04 Javascript
node.js中watch机制详解
2014/11/17 Javascript
javascript中加var和不加var的区别 你真的懂吗
2016/01/06 Javascript
JavaScript中的原型继承基础学习教程
2016/05/06 Javascript
JavaScript String 对象常用方法详解
2016/05/13 Javascript
使用jQuery调用XML实现无刷新即时聊天
2016/08/07 Javascript
关于Jquery中的bind(),on()绑定事件方式总结
2016/10/26 Javascript
vue使用axios实现文件上传进度的实时更新详解
2017/12/20 Javascript
webpack项目调试以及独立打包配置文件的方法
2018/02/28 Javascript
Vue程序调试的方法
2019/06/17 Javascript
基于node+websocket+html实现腾讯课堂聊天室聊天功能
2020/03/04 Javascript
vue npm install 安装某个指定的版本操作
2020/08/11 Javascript
[05:03]2018DOTA2亚洲邀请赛主赛事首日回顾
2018/04/04 DOTA
python生成随机图形验证码详解
2017/11/08 Python
python把数组中的数字每行打印3个并保存在文档中的方法
2018/07/17 Python
Python交互式图形编程的实现
2019/07/25 Python
opencv设置采集视频分辨率方式
2019/12/10 Python
浅谈pytorch池化maxpool2D注意事项
2020/02/18 Python
python 在右键菜单中加入复制目标文件的有效存放路径(单斜杠或者双反斜杠)
2020/04/08 Python
TensorFlow2.1.0最新版本安装详细教程
2020/04/08 Python
python接入支付宝的实例操作
2020/07/20 Python
python解压zip包中文乱码解决方法
2020/11/27 Python
python 检测图片是否有马赛克
2020/12/01 Python
Html5页面获取微信公众号的openid的方法
2020/05/12 HTML / CSS
高中生自我鉴定范文
2013/10/30 职场文书
建筑工程专业学生的自我评价
2013/12/25 职场文书
服装创业计划书范文
2014/02/05 职场文书
防火标语大全
2014/10/06 职场文书
2019新员工试用期转正申请书3篇
2019/08/13 职场文书
2019年关于小学生课外阅读情况的分析报告
2019/12/02 职场文书