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 相关文章推荐
ArrayList类(增强版)
Apr 04 Javascript
在javaScript中关于submit和button的区别介绍
Oct 20 Javascript
iframe子页面与父页面在同域或不同域下的js通信
May 07 Javascript
node.js学习总结之调式代码的方法
Jun 25 Javascript
Bootstrap前端开发案例二
Jun 17 Javascript
jquery dataTable 后台加载数据并分页实例代码
Jun 07 jQuery
Webpack如何引入bootstrap的方法
Jun 17 Javascript
jquery插件开发之选项卡制作详解
Aug 30 jQuery
js+canvas实现滑动拼图验证码功能
Mar 26 Javascript
javascript创建元素和删除元素实例小结
Jun 19 Javascript
使用Vue CLI创建typescript项目的方法
Aug 09 Javascript
js通过循环多张图片实现动画效果
Dec 19 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生成N个不重复的随机数实例
2013/11/12 PHP
destoon实现调用当前栏目分类及子分类和三级分类的方法
2014/08/21 PHP
php格式化时间戳
2016/12/17 PHP
前台js改变Session的值(用ajax实现)
2012/12/28 Javascript
使用JavaScript动态设置样式实现代码及演示动画
2013/01/25 Javascript
javascript实现促销倒计时+fixed固定在底部
2013/09/18 Javascript
JavaScript执行顺序详细介绍
2013/12/04 Javascript
禁止IE用右键的JS代码
2013/12/30 Javascript
js控制href内容的连接内容的变化示例
2014/04/30 Javascript
解释&amp;&amp;和||在javascript中的另类用法
2014/07/28 Javascript
Javascript中的Callback方法浅析
2015/03/15 Javascript
JavaScript获取当前cpu使用率的方法
2015/12/15 Javascript
浅析上传头像示例及其注意事项
2016/12/14 Javascript
JS如何生成一个不重复的ID的函数
2016/12/25 Javascript
React中ES5与ES6写法的区别总结
2017/04/21 Javascript
详解Vue组件实现tips的总结
2017/11/01 Javascript
JS常用正则表达式超全集(密码强度校验,金额校验,IE版本,IPv4,IPv6校验)
2020/02/03 Javascript
JS Generator 函数的含义与用法实例总结
2020/04/08 Javascript
vue中实现图片压缩 file文件的方法
2020/05/28 Javascript
Vue 根据条件判断van-tab的显示方式
2020/08/03 Javascript
react antd表格中渲染一张或多张图片的实例
2020/10/28 Javascript
python append、extend与insert的区别
2016/10/13 Python
python异步实现定时任务和周期任务的方法
2019/06/29 Python
浅析PEP570新语法: 只接受位置参数
2019/10/15 Python
Python class的继承方法代码实例
2020/02/14 Python
python 数据库查询返回list或tuple实例
2020/05/15 Python
Python实现初始化不同的变量类型为空值
2020/06/02 Python
Selenium结合BeautifulSoup4编写简单的python爬虫
2020/11/06 Python
HTML5中图片之间的缝隙完美解决方法
2017/07/07 HTML / CSS
西班牙香水和化妆品网上商店:Douglas
2017/10/29 全球购物
thinkphp5 redis缓存新增方法实例讲解
2021/03/24 PHP
《掌声》教学反思
2014/02/23 职场文书
对孩子的寄语
2014/04/09 职场文书
电子商务助理求职自荐信
2014/04/10 职场文书
检察机关个人对照检查材料
2014/09/15 职场文书
2015年医院创卫工作总结
2015/04/22 职场文书