{{ parStr }}
{{ parArr }}
{{ parAny }}
`
})
<my-component-a
:par-str = “str”
:par-arr = “arr”
:par-any = “any”
prop 还可以同时指定多个类型,通过数组方式保存即可
Vue.component(‘MyComponentA’, {
props: {
parData: [String, Number]
},
template: `
{{ parData }}
`
})
==================================================================
当 prop 需要设置多重规则时,可以将 prop 的值设置为选项对象
之前的类型检测功能通过 type 选项设置
Vue.component(‘MyComponentA’, {
props: {
parNum: {
type: Number
},
parData: {
type: [String, Boolean]
}
},
template: `
{{ parNum }}
{{ parData }}
`
})
required 用于设置数据为必填项
Vue.component(‘MyComponentA’, {
props: {
parNum: {
type: Number,
required: true
}
},
template: `
{{ parNum }}
`
})
default 用于给可选项指定默认值,当父组件未传递数据时生效
Vue.component(‘MyComponentA’, {
props: {
parNum: {
type: Number,
dafault: 100
}
},
template: `
{{ parNum }}
`
})
注意:当默认值为数组或对象是,必须为工厂函数返回的形式
Vue.component(‘MyComponentA’, {
props: {
parArr: {
type: Array,
default: function () {
return [1, 2, 3]
}
}
},
template: `
{{ parArr }}
`
})
validator 用于给传入的 prop 设置校验函数,return 值为 false 时 Vue.js 会发生警告
Vue.component(‘MyComponentA’, {
props; {
type: String,
validator: function (value) {
return value.startsWitn(‘lagou’);
}
},
template: `
{{ parStr }}
`
})
注意:验证函数中无法使用实例的 data、methods 等功能
====================================================================
当父组件给子组件设置了属性,但此属性在 props 中不存在,这时会自动绑定到子组件的根元素上
<my-component-a
demo-attr=“示例属性”
title=“示例title”
style=“height: 200px”
class=“colorBlue”
如果组件根元素已经存在了对应属性,则会替换组件内部的值
class 与 style 是例外,当内外都设置时,属性会自动合并
Vue.component(‘MyComponentA’, {
template: `
子组件内容
`
})
如果不希望继承父组件设置的属性,可以设置 inheritAttrs: false
,但是只适用于普通书写,class 与 style 不受影响
Vue.component(‘MyComponentA’, {
inheritAttrs: false,
template: `
子组件内容
`
})
===================================================================
子向父传值需要通过自定义事件实现
商品为子组件,购物车为父组件,父组件需统计商品个数,就需要在子组件个数变化时传值给父组件
购物车
<product-item
v-for=“product in products”
:title=“product.title”
:key=“product.id”
总数为:{{ totalCount }}
子组件数据变化时,通过 $emit()
触发自定义事件
Vue.component(‘product-item’, {
// …
methods: {
countIns () {
this.$emit(‘count-change’);
this.count++
}
}
})
子组件向父组件传值
父组件监听子组件自定义事件,并设置处理程序
<product-item
@count-change=“totalCount++”
=================================================================
子组件触发事件时可以向父组件传值
Vue.component(“product-item”, {
props: [‘title’],
template: `
商品名称:{{ title }};商品个数:{{ count }}
<button @click=“countIns1”> +1
<button @click=“countIns2”> +5
`,
data () {
return { count: 0 }
}.
methods: {
countIns1 () {
this.$emit(‘count-change’, 1);
this.count++
}
countIns5 () {
this.$emit(‘count-change’, 5);
this.count += 5
}
}
})
父组件在监听事件时需要接受子组件传递的数据
<product-item
@count-change=“totalCount += $event”
父组件在监听事件时需要接受子组件传递的数据
<product-item
@count-change=“onCountChange”
=====================================================================
v-model
用于组件时,需要通过 props 与自定义事件实现
输入内容为:{{ iptValue }}
=================================================================
兄弟组件或完全无关的两个组件
-
兄弟组件传值
-
EventBus
-
其他传值方式
================================================================
兄弟组件可以通过父组件进行数据中转
<com-a
@value-change=“value = $event”
<com-b
:value=“value”
==================================================================
当组件嵌套关系复杂时,根据组件关系传值会较为繁琐
组件为了数据中转,data 中会存在许多与当前组件功能无关的数据
-
EventBus(事件总线)是一个独立的事件中心,用于管理不同组件间的传值操作
-
EventBus 通过一个新的 Vue 实例来管理组件传值操作,组件通过给实例注册事件、调用事件来实现数据传递
// Event.js
var bus = new Vue()
发送数据的组件触发 bus 事件,接收的组件给 bus 注册对应事件
Vue.component(“product-item”, {
template: `
商品名称:苹果;商品个数:{{ count }}
<button @click=“countIns”> +1
`,
data () {
return { count: 0 }
}.
methods: {
countIns () {
bus.$emit(‘countChange’, 1);
this.count++;
}
}
})
给 bus 注册对应事件通过 $on()
操作
Vue.component(“product-total”, {
template: `
总个数为:{{ totalCout }}
`,
data () {
return { totalCout: 0 }
}.
created () {
bus.$on(‘countChange’, (productCount) => {
this.totalCount += productCount;
})
}
})
最后创建根实例执行代码即可
================================================================
-
$root
-
$refs
$root 用于访问当前组件树根实例,设置简单的 Vue 应用时可以通过此方式进行组件传值
父组件数据:{{ count }}
除了 $root,Vue.js 中还提供了 $parent 与 $children 用于便捷访问父子组件
$refs 用于获取设置了 ref 属性的 HTML 标签或子组件
给普通 HTML 标签设置 ref 属性,$refs 可以获取 DOM 对象
<button @click=“fn”>按钮
给子组件设置 ref 属性,渲染后可通过 $refs 获取子组件实例
按钮
给子组件设置 ref 属性,渲染后可通过 $refs 获取子组件实例
按钮
==============================================================
组件插槽可以便捷的设置组件内容
示例内容
组件的主体内容
==============================================================
如果我们希望组件标签可以像 HTML 标签一样设置内容,那么组件的使用灵活度会很高
示例内容1
示例内容2
但平常我们书写的组件,组件首尾标签中书写的内容会被抛弃
示例内容
组件的主体内容
我们需要通过 进行插槽设置
示例内容
组件的主体内容
需要注意模板内容的渲染位置
这里只能访问父组件的数据
{{ parValue }}
我们可以在 中为插槽设置默认值,也称为后备内容
var ComA = {
template: `
组件 A:
这是默认文本
`,
data () {
return {
value: ‘子组件数据’
}
}
}
小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注:前端)
ES6
-
列举常用的ES6特性:
-
箭头函数需要注意哪些地方?
-
let、const、var
-
拓展:var方式定义的变量有什么样的bug?
-
Set数据结构
-
拓展:数组去重的方法
-
箭头函数this的指向。
-
手写ES6 class继承。
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
微信小程序
-
简单描述一下微信小程序的相关文件类型?
-
你是怎么封装微信小程序的数据请求?
-
有哪些参数传值的方法?
-
你使用过哪些方法,来提高微信小程序的应用速度?
-
小程序和原生App哪个好?
-
简述微信小程序原理?
-
分析微信小程序的优劣势
-
怎么解决小程序的异步请求问题?
ue }}
我们可以在 中为插槽设置默认值,也称为后备内容
var ComA = {
template: `
组件 A:
这是默认文本
`,
data () {
return {
value: ‘子组件数据’
}
}
}
小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-NkjIHLPz-1711024879484)]
[外链图片转存中…(img-p7lq2j0y-1711024879485)]
[外链图片转存中…(img-5h8yroXF-1711024879486)]
[外链图片转存中…(img-UY8ARZGp-1711024879486)]
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注:前端)
[外链图片转存中…(img-XBalAfkn-1711024879486)]
ES6
-
列举常用的ES6特性:
-
箭头函数需要注意哪些地方?
-
let、const、var
-
拓展:var方式定义的变量有什么样的bug?
-
Set数据结构
-
拓展:数组去重的方法
-
箭头函数this的指向。
-
手写ES6 class继承。
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
微信小程序
-
简单描述一下微信小程序的相关文件类型?
-
你是怎么封装微信小程序的数据请求?
-
有哪些参数传值的方法?
-
你使用过哪些方法,来提高微信小程序的应用速度?
-
小程序和原生App哪个好?
-
简述微信小程序原理?
-
分析微信小程序的优劣势
-
怎么解决小程序的异步请求问题?