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 相关文章推荐
js类中获取外部函数名的方法与代码
Sep 12 Javascript
js截取函数(indexOf,join等)
Sep 01 Javascript
JavaScript面试题(指针、帽子和女朋友)
Nov 23 Javascript
使用BootStrap实现悬浮窗口的效果
Dec 13 Javascript
Textarea输入字数限制实例(兼容iOS&amp;安卓)
Jul 06 Javascript
node 利用进程通信实现Cluster共享内存
Oct 27 Javascript
[原创]jquery判断元素内容是否为空的方法
May 04 jQuery
ES6 迭代器与可迭代对象的实现
Feb 11 Javascript
Angular封装搜索框组件操作示例
Apr 25 Javascript
详解如何修改 node_modules 里的文件
May 22 Javascript
VsCode里的Vue模板的实现
Aug 12 Javascript
VUE 实现element upload上传图片到阿里云
Aug 12 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
PHP实现的防止跨站和xss攻击代码【来自阿里云】
2018/01/29 PHP
php实现简易计算器
2020/08/28 PHP
javascript各浏览器中option元素的表现差异
2011/04/07 Javascript
基于jquery中children()与find()的区别介绍
2013/04/26 Javascript
js如何实现设计模式中的模板方法
2013/07/23 Javascript
在JavaScript的jQuery库中操作AJAX的方法讲解
2015/08/15 Javascript
js获取鼠标点击的对象,点击另一个按钮删除该对象的实现代码
2016/05/13 Javascript
深入理解JS实现快速排序和去重
2016/10/17 Javascript
javascript实现电脑和手机版样式切换
2017/11/10 Javascript
Angular5集成eventbus的示例代码
2018/07/19 Javascript
vue实现新闻展示页的步骤详解
2019/04/11 Javascript
对layui中的onevent 和event的使用详解
2019/09/06 Javascript
jquery css实现流程进度条
2020/03/26 jQuery
js实现tab栏切换效果
2020/08/02 Javascript
javascript中正则表达式语法详解
2020/08/07 Javascript
Element el-button 按钮组件的使用详解
2021/02/01 Javascript
[47:48]DOTA2上海特级锦标赛D组小组赛#2 Liquid VS VP第三局
2016/02/28 DOTA
Python 爬虫之超链接 url中含有中文出错及解决办法
2017/08/03 Python
windows 下python+numpy安装实用教程
2017/12/23 Python
详解Python中如何写控制台进度条的整理
2018/03/07 Python
PyQt5显示GIF图片的方法
2019/06/17 Python
django 自定义过滤器(filter)处理较为复杂的变量方法
2019/08/12 Python
Python远程开发环境部署与调试过程图解
2019/12/09 Python
HTML5安全介绍之内容安全策略(CSP)简介
2012/07/10 HTML / CSS
吃透移动端 Html5 响应式布局
2019/12/16 HTML / CSS
德国运动营养和健身网上商店:Myprotein.de
2018/07/18 全球购物
策划助理岗位职责
2013/11/18 职场文书
问卷调查计划书
2014/01/10 职场文书
市场部经理岗位职责
2014/04/10 职场文书
乔丹名人堂演讲稿
2014/05/24 职场文书
电子商务专业应届毕业生求职信
2014/06/21 职场文书
2016优秀毕业生个人事迹材料
2016/02/29 职场文书
Oracle设置DB、监听和EM开机启动的方法
2021/04/25 Oracle
PyTorch的Debug指南
2021/05/07 Python
详解Python内置模块Collections
2022/03/22 Python
Python实现文字pdf转换图片pdf效果
2022/04/03 Python