Prop验证、inheritAttrs、$attrs的用法和坑
Prop
Prop验证
Vue.component('my-component', {
props: {
// 基础的类型检查 (`null` 和 `undefined` 会通过任何类型验证)
propA: Number,
// 多个可能的类型
propB: [String, Number],
// 必填的字符串
propC: {
type: String,
required: true
},
// 带有默认值的数字
propD: {
type: Number,
default: 100
},
// 带有默认值的对象
propE: {
type: Object,
// 对象或数组默认值必须从一个工厂函数获取
default: function () {
return { message: 'hello' }
}
},
// 自定义验证函数
propF: {
validator: function (value) {
// 这个值必须匹配下列字符串中的一个
return ['success', 'warning', 'danger'].indexOf(value) !== -1
}
}
}
})
- prop 会在一个组件实例创建之前进行验证
非 Prop 的 Attribute
如果一个父组件向其子组件传递一个属性,但是子组件没有使用props接收它,那么这个属性就会被添加到子组件的根元素上去,即:在子组件使用
this.$attrs就能获取到传入的属性对应的值<div id="app">
<child-com :name='name' :age='age' :sex='sex'></child-com>
</div> <script>
const vm = new Vue({
el: '#app', // 父组件
data: {
name: 'lyl',
age: 20,
sex: '男'
},
components: {
childCom: { // 子组件
template: `
<div>
<span> {{name}} </span>
<grand-com v-bind='$attrs'></grand-com> <!-- 注意看这里,你会发现这里的 v-bind后面直接跟上的不是一个属性而是等号 -->
<!-- 这样一来我们就把 子组件中没有用到的属性(除class和style以外)全部传到了孙子组件 -->
</div>
`,
props: ['name'], // 这里没有将 age 和 sex 在 props 中接收
created() {
console.log(this.$attrs) // 控制台打印:{age:20,sex:男}
},
components: {
grandCom: { // 孙子组件
template: `
<div>
<span>{{$attrs.age}}</span>
<span>{{$attrs.sex}}</span>
</div>
`,
}
}
}
}
})
</script>
inheritAttrs属性的用法<div id="app">
<child-com :name='name' :age='age' :sex='sex'></child-com>
</div> <script>
const vm = new Vue({
el: '#app', // 父组件
data: {
name: 'lyl',
age: 20,
sex: '男'
},
components: {
childCom: { // 子组件
template: `
<div>
<span> {{name}} </span>
</div>
`,
props: ['name'], // 这里没有将 age 和 sex 在 props 中接收
created() {
console.log(this.$attrs) // 控制台打印:{age:20,sex:男}
}
}
}
})
</script>

你就会发现,这里的div标签上面被绑定了age、sex这样的属性,这就是官方文档说的非Prop的属性会被添加被绑定组件的根元素上 ,就如上图所示,但是往往你是不想这样做的,那么就可以使用
inheritAttrs属性了用法:在子组件的模板对象中添加
inheritAttrs: false即可让这种情况禁止掉<div id="app">
<child-com :name='name' :age='age' :sex='sex'></child-com>
</div> <script>
const vm = new Vue({
el: '#app', // 父组件
data: {
name: 'lyl',
age: 20,
sex: '男'
},
components: {
childCom: { // 子组件
inheritAttrs: false, // 父组件传入的name、age、sex属性中除子组件props接收的属性name外,其他属性默认会被浏览器渲染成html属性,但是设置该属性之后则不会被浏览器这样渲染
template: `
<div>
<span> {{name}} </span>
</div>
`,
props: ['name'], // 这里没有将 age 和 sex 在 props 中接收
created() {
console.log(this.$attrs) // 控制台打印:{age:20,sex:男}
}
}
}
})
</script>

Prop验证、inheritAttrs、$attrs的用法和坑的更多相关文章
- cin.getline()的用法和坑
cin.getline()的用法和坑 cin.getline大致原型:**istream& getline (char* s, streamsize n, char delim='\n');* ...
- VueJs组件prop验证简单理解
今天看了vuejs的组件,看到了prop组件,主要作用是在传入数据的时候对传入的值做判断,写了个小例子. <div id="app"> <my-child :nu ...
- Vue组件传值prop验证方式
在Vue组件开发过程中,父组件要经常给子组件传递数据,在传递数据的过程中,子组件可以使用prop来接收父组件传递的值,同时呢,我们可以为组件的 prop 指定验证要求,例如你知道的这些类型.如果有一个 ...
- 苹果IOS内购二次验证返回state为21002的坑
项目是三四年前的老项目,之前有IOS内购二次验证的接口,貌似很久都没用了,然而最近IOS的妹子说接口用不了,让我看看啥问题.接口流程时很简单的,就是前端IOS在购买成功之后,接收到receipt后进行 ...
- 组件Prop验证
<div id="example"> <kkk></kkk> </div> <script src="https:/ ...
- ajax传递数组给controller的实现方法和坑
这里是前端向后端传递一个数组的方式,参考下面这个示例: (主要是将前端的数组,用 JSON.stringify() 方法json化一下,然后后端springmvc接收到以后,使用 JSONArray ...
- python 一些特殊用法和坑
https://github.com/leisurelicht/wtfpython-cn
- ASP.NET Core 模型验证的一个小小坑
今天在我们的一个项目中遇到一个 asp.net core 模型验证(model validation)的小问题.当模型属性的类型是 bool ,而提交上来的该属性值是 null ,asp.net co ...
- vue3中$attrs的变化与inheritAttrs的使用
在vue3中的$attrs的变化 $listeners已被删除合并到$attrs中. $attrs现在包括class和style属性. 也就是说在vue3中$listeners不存在了.vue2中$l ...
随机推荐
- svn 冲突解决办法(黄色感叹号)
右键:"TortoiseSVN"->"Resolved..."已解决的..., 选中全部的文件,然后OK,,然后就可以commit提交了.
- MySQL视图操作命令详解
内容目录 创建视图 删除视图 修改视图 查看视图 §创建视图 在MySQL中,创建视图的完整语法如下: CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | ME ...
- jQuery-自己封装的弹框
(function () { CDK={ cfm:function(resFun,errFun){ var confirm=document.createElement('div'); confirm ...
- Git的使用--如何将本地项目上传到Github(两种简单、方便的方法..)
https://blog.csdn.net/u014135752/article/details/79951802 总结:其实只需要进行下面几步就能把本地项目上传到Github 1.在本地创建一个版本 ...
- SpringBoot的四种定时任务
定时任务实现的几种方式: Timer:这是java自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务. 使用这种方式可以让你的程序按照某一个频度执行 ...
- 前端工具--利用Adblock Plus阻止js执行
今天遇到个问题:需要阻止页面某个js的运行 效果达到
- Python5_学习方法论
学习路线: 1.对基础知识的全面掌握,熟悉IDE和基本概念,注重知识体系构建: 2.开发实战.在该过程中掌握各类框架知识.熟悉模块的使用.并根据问题深入学习: ==================== ...
- 最全最详细的PHP面试题(带有答案)
这篇文章介绍的内容是关于最全最详细的PHP面试题(带有答案),有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 相关推荐: 分享一波腾讯PHP面试题 2019年PHP最新面试题(含答案) ...
- 优雅的使用BeanUtils对List集合的操作
摘要 在业务员流程的时候,我们在Entity.Bo.Vo层数据间可能经常转换数据,Entity对应的是持久层数据结构(一般是数据库表的映射模型).Bo对应的是业务层操作的数据结构.Vo就是Contro ...
- layui中使用自定义数据格式对数据表格进行渲染
1.引入 <link rel="stylesheet" href="../layui/css/layui.css"> <script src= ...