Angular 2 ngForm中的ngModel、[ngModel]和[(ngModel)]的写法

发布时间 - 2026-01-11 02:06:55    点击率:

“对呀对呀!……回字有四样写法,你知道么?”,当时鲁大大如此讽刺孔乙己,意味着老孔这个被科举制毒害的人注意此种无用之物实在可悲。但是在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 父子组件数据通信。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# angularjs中ng  # model  # angularjs  # ng  # AngularJS解决ng-if中的ng-model值无效的问题  # AngularJS动态绑定ng-options的ng-model实例代码  # AngularJS实践之使用NgModelController进行数据绑定  # AngularJs Understanding the Model Component  # AngularJS基础 ng-model-options 指令简单示例  # AngularJs 弹出模态框(model)  # 深入浅析AngularJS和DataModel  # AngularJS实现Model缓存的方式  # angularjs自定义ng-model标签的属性  # angularjs在ng-repeat中使用ng-model遇到的问题  # 绑定  # 输入框  # 你知道  # 表单  # 之物  # 对呀  # 的人  # 的是  # 也就是说  # 我要  # 还能  # 会在  # 数据通信  # 如果没有  # 仅为  # 为其  # 怎么做  # 时就  # 向你  # 即是 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何在建站主机中优化服务器配置?  如何快速查询域名建站关键信息?  Android GridView 滑动条设置一直显示状态(推荐)  如何在Windows服务器上快速搭建网站?  通义万相免费版怎么用_通义万相免费版使用方法详细指南【教程】  bing浏览器学术搜索入口_bing学术文献检索地址  Laravel Pest测试框架怎么用_从PHPUnit转向Pest的Laravel测试教程  Laravel如何使用withoutEvents方法临时禁用模型事件  javascript中闭包概念与用法深入理解  香港服务器WordPress建站指南:SEO优化与高效部署策略  如何将凡科建站内容保存为本地文件?  电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?  Android自定义listview布局实现上拉加载下拉刷新功能  JavaScript如何实现类型判断_typeof和instanceof有什么区别  详解vue.js组件化开发实践  Android实现代码画虚线边框背景效果  深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?  如何正确选择百度移动适配建站域名?  Laravel如何构建RESTful API_Laravel标准化API接口开发指南  公司网站制作需要多少钱,找人做公司网站需要多少钱?  西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?  IOS倒计时设置UIButton标题title的抖动问题  猎豹浏览器开发者工具怎么打开 猎豹浏览器F12调试工具使用【前端必备】  HTML 中动态设置元素 name 属性的正确语法详解  Laravel Eloquent访问器与修改器是什么_Laravel Accessors & Mutators数据处理技巧  php静态变量怎么调试_php静态变量作用域调试技巧【解答】  Laravel的辅助函数有哪些_Laravel常用Helpers函数提高开发效率  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  深入理解Android中的xmlns:tools属性  如何在Windows虚拟主机上快速搭建网站?  Laravel如何处理CORS跨域问题_Laravel项目CORS配置与解决方案  如何在IIS中新建站点并配置端口与物理路径?  Laravel项目如何进行性能优化_Laravel应用性能分析与优化技巧大全  网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?  PHP 实现电台节目表的智能时间匹配与今日/明日轮播逻辑  Win11搜索不到蓝牙耳机怎么办 Win11蓝牙驱动更新修复【详解】  如何快速搭建高效服务器建站系统?  如何在阿里云完成域名注册与建站?  Laravel如何实现数据库事务?(DB Facade示例)  如何在阿里云虚拟主机上快速搭建个人网站?  Laravel如何实现多表关联模型定义_Laravel多对多关系及中间表数据存取【方法】  WordPress 子目录安装中正确处理脚本路径的完整指南  活动邀请函制作网站有哪些,活动邀请函文案?  香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南  Laravel如何使用Livewire构建动态组件?(入门代码)  Laravel如何配置和使用队列处理异步任务_Laravel队列驱动与任务分发实例  Laravel怎么实现验证码(Captcha)功能  canvas 画布在主流浏览器中的尺寸限制详细介绍  如何在建站宝盒中设置产品搜索功能?  如何快速辨别茅台真假?关键步骤解析