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 相关文章推荐
Javascript 检测、添加、移除样式(className)函数代码
Sep 08 Javascript
js 函数调用模式小结
Dec 26 Javascript
用最通俗易懂的代码帮助新手理解javascript闭包 推荐
Mar 01 Javascript
js获取height和width的方法说明
Jan 06 Javascript
js比较和逻辑运算符的介绍
Mar 10 Javascript
javascript回车完美实现tab切换功能
Mar 13 Javascript
Eclipse配置Javascript开发环境图文教程
Jan 29 Javascript
Vue+SpringBoot开发V部落博客管理平台
Dec 27 Javascript
JS实现区分中英文并统计字符个数的方法示例
Jun 09 Javascript
JavaScript代码调试方法实例小结
Jan 05 Javascript
javascript删除数组元素的七个方法示例
Sep 09 Javascript
小程序新版订阅消息模板消息
Dec 31 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
Laravel框架实现利用监听器进行sql语句记录功能
2018/06/06 PHP
基于PHP+Mysql简单实现了图书购物车系统的实例详解
2020/08/06 PHP
javascript显示选择目录对话框的代码
2008/11/10 Javascript
不同浏览器对回车提交表单的处理办法
2010/02/13 Javascript
SharePoint 客户端对象模型 (一) ECMA Script
2011/05/22 Javascript
在新窗口打开超链接的方法小结
2013/04/14 Javascript
JS的千分位算法实现思路
2013/07/31 Javascript
15个常用的jquery代码片段
2015/12/19 Javascript
jQuery动画效果相关方法实例分析
2015/12/31 Javascript
WordPress中利用AJAX异步获取评论用户头像的方法
2016/01/08 Javascript
Angularjs 动态改变title标题(兼容ios)
2016/12/29 Javascript
jQuery实现注册会员时密码强度提示信息功能示例
2017/09/05 jQuery
JavaScript使用FileReader实现图片上传预览效果
2020/03/27 Javascript
js实现HTML中Select二级联动的实例
2018/01/05 Javascript
vue-music 使用better-scroll遇到轮播图不能自动轮播问题
2018/12/03 Javascript
bootstrap-table formatter 使用vue组件的方法
2019/05/09 Javascript
angularjs自定义过滤器demo示例
2019/08/24 Javascript
Layui 解决表格异步调用后台分页的问题
2019/10/26 Javascript
JavaScript实现滑动门效果
2020/01/18 Javascript
[56:35]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第一局
2016/03/06 DOTA
[01:06]DOTA2小知识课堂 Ep.02 吹风竟可解梦境缠绕
2019/12/05 DOTA
Python 网页解析HTMLParse的实例详解
2017/08/10 Python
mac下给python3安装requests库和scrapy库的实例
2018/06/13 Python
pandas分别写入excel的不同sheet方法
2018/12/11 Python
在pycharm中设置显示行数的方法
2019/01/16 Python
python3利用Socket实现通信的方法示例
2019/05/06 Python
python实现Dijkstra算法的最短路径问题
2019/06/21 Python
Python sorted排序方法如何实现
2020/03/31 Python
世界知名接发和假发品牌:Poze Hair
2017/03/08 全球购物
python re模块和正则表达式
2021/03/24 Python
大学生职业生涯规划书前言
2014/01/09 职场文书
运动会开幕式解说词
2014/02/05 职场文书
保安岗位职责
2014/02/21 职场文书
教师群众路线心得体会
2014/11/04 职场文书
小学优秀教师材料
2014/12/15 职场文书
如何制作自己的原生JavaScript路由
2021/05/05 Javascript