Angular value与ngValue区别详解


Posted in Javascript onNovember 27, 2019

前言

在最近的项目中,需要用到 select 组件,之前 Angular 前台都是用现有的封装好的框架,一般都是从 Ctrl+cCtrl+v 的操作然后改一下就可以用,最近使用的 Bootstrap 原生样式,所以一切都得自己写,但是这样也有好处的,不会受框架的局限性。

Angular value与ngValue区别详解

组件

ts部分代码:

input 输入, output 输出

@Input()
 set college(value: College) {
  this.innerCollege = value;
 }

 get college(): College {
  return this.innerCollege;
 }

 private innerCollege: College;

 @Output()
 collegeSelect: EventEmitter<College> = new EventEmitter();
 
 .........
 
  public change(college: College): void {
  this.collegeSelect.emit(college);
 }

Html:

<select [compareWith]="comparedWithId" class="form-control" [(ngModel)]="college" (change)="change(college)">
 <option value="-1" >请选择学院...</option>
 <option *ngFor="let _college of colleges" [value]="_college">{{_college.name}}</option>
</select>

问题

在发送请求时,向后台发送 Post 请求时发生错误,并提示状态码为 400

Angular value与ngValue区别详解

出现 400

的状态码的错误一般有两种:

1、语义有误,当前请求无法被 服务器 理解。除非进行修改,否则客户端不应该重复提交这个请求。

2、请求参数有误。

在看一下向后台发送数据为 [Object Object]

Angular value与ngValue区别详解

很明显我们这就是第二种请求参数错误,应该是传过去一个 College 对象,而我们传过去了一个 [Object Object]

原因

为什么会出现这个原因呢,在大家看来 [Object Object] 是不是也是一个对象?

在控制台打印,发现传过去的 College 就是 [Object Object]

Angular value与ngValue区别详解

为什么会这样显示呢,感觉怪怪的,不是应该显示 JSON 格式的对象么?

google 一下问题迎刃而解,在 stackoverflow 有详细的解释

Angular value与ngValue区别详解

[value]="..." 仅支持字符串值
[ngValue]="..." 支持任何类型

所以 value 仅支持串字符串,不支持传对象,如果使用 value 传对象,然而不会得到正确的解析,就得到了我们看到的 [Object Object]

修改为ngValue

<select [compareWith]="comparedWithId" class="form-control" [(ngModel)]="college" (change)="change(college)">
 <option value="-1" >请选择学院...</option>
 <option *ngFor="let _college of colleges" [ngValue]="_college">{{_college.name}}</option>
</select>

控制台打印:

Angular value与ngValue区别详解

现在看来是我们想要的数据!!!

在次发送请求,状态码 200 成功

Angular value与ngValue区别详解

Angular value与ngValue区别详解

数据也是正确的!!没有问题!!

总结

感觉之前还是太依赖于框架,没有深究 ValuengValue 有什么不同,框架里用 Value 就直接复制过去,框架都是封装好的,导致现在自己用到了,不知道怎么写的了。

用框架也有好处,既方便又省时间,什么都是现成的。

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

Javascript 相关文章推荐
Mootools 1.2教程 输入过滤第二部分(字符串)
Sep 15 Javascript
JavaScript中关于indexOf的使用方法与问题小结
Aug 05 Javascript
一样的table?不一样的table(可编辑状态table)
Sep 19 Javascript
javascript获取元素CSS样式代码示例
Nov 28 Javascript
Javascript缓存API
Jun 14 Javascript
js事件驱动机制 浏览器兼容处理方法
Jul 23 Javascript
JS实现图片延迟加载并淡入淡出效果的简单方法
Aug 25 Javascript
Bootstrap轮播插件使用代码
Oct 11 Javascript
JS添加或修改控件的样式(Class)实现方法
Oct 15 Javascript
JavaScript正则表达式实例详解
Oct 16 Javascript
vue项目实现设置根据路由高亮对应的菜单项操作
Aug 06 Javascript
Vue通过阿里云oss的url连接直接下载文件并修改文件名的方法
Dec 25 Vue.js
原生js实现二级联动菜单
Nov 27 #Javascript
微信小程序wxml列表渲染原理解析
Nov 27 #Javascript
原生js实现下拉选项卡
Nov 27 #Javascript
浅析Vue下的components模板使用及应用
Nov 27 #Javascript
d3.js 地铁轨道交通项目实战
Nov 27 #Javascript
微信小程序表单验证WxValidate的使用
Nov 27 #Javascript
vue(2.x,3.0)配置跨域代理
Nov 27 #Javascript
You might like
PHP中10个不常见却非常有用的函数
2010/03/21 PHP
php获取文章上一页与下一页的方法
2014/12/01 PHP
使用PHP接受文件并获得其后缀名的方法
2015/08/05 PHP
php中二维数组排序问题方法详解
2015/08/28 PHP
php实现和c#一致的DES加密解密实例
2017/07/24 PHP
PHP中的浅复制与深复制的实例详解
2017/10/26 PHP
PHP命令Command模式用法实例分析
2018/08/08 PHP
在 IE 中调用 javascript 打开 Excel 表
2006/12/21 Javascript
在浏览器中获取当前执行的脚本文件名的代码
2011/07/19 Javascript
js中for in的用法示例解析
2013/12/25 Javascript
把普通对象转换成json格式的对象的简单实例
2016/07/04 Javascript
Angular.Js的自动化测试详解
2016/12/09 Javascript
微信小程序云开发获取文件夹下所有文件(推荐)
2019/11/14 Javascript
[02:54]辉夜杯主赛事第二日败者组 iG.V赛后采访
2015/12/26 DOTA
[03:49]辉夜杯现场龙骑士COSER秀情商“我喜欢芬队!”
2015/12/27 DOTA
Python制作简单的网页爬虫
2015/11/22 Python
python3实现ftp服务功能(服务端 For Linux)
2017/03/24 Python
Python在不同目录下导入模块的实现方法
2017/10/27 Python
Python实现的多项式拟合功能示例【基于matplotlib】
2018/05/15 Python
Ubuntu下升级 python3.7.1流程备忘(推荐)
2018/12/10 Python
python将pandas datarame保存为txt文件的实例
2019/02/12 Python
Django实现学生管理系统
2019/02/26 Python
Python空间数据处理之GDAL读写遥感图像
2019/08/01 Python
基于python3实现倒叙字符串
2020/02/18 Python
python 基于opencv实现高斯平滑
2020/12/18 Python
css3弹性盒模型实例介绍
2013/05/27 HTML / CSS
阿联酋团购网站:Groupon阿联酋
2016/10/14 全球购物
美国隐形眼镜网上商店:Lens.com
2019/09/03 全球购物
你常见到的runtime exception
2016/09/05 面试题
教师应聘个人求职信
2013/12/10 职场文书
开办加工厂创业计划书
2014/01/03 职场文书
物控部经理职务说明书
2014/02/25 职场文书
小学老师对学生的评语
2014/12/29 职场文书
员工加薪申请报告
2015/05/15 职场文书
解决mysql:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO/YES)
2021/06/26 MySQL
js中Map和Set的用法及区别实例详解
2022/02/15 Javascript