父传子:水往低处流(单向绑定的原则),子不能修改父传过来的属性,它是只读的,但是可以使用监听和计算属性进行修改
父组件
//动态绑定状态
子组件
//显示内容
{{ mytitle }}
export default {
props: {
// 基础类型检查
//(给出 `null` 和 `undefined` 值则会跳过任何类型检查)
propA: Number,
// 多种可能的类型
propB: [String, Number],
// 必传,且为 String 类型
propC: {
type: String,
required: true
},
// Number 类型的默认值
propD: {
type: Number,
default: 100
},
// 对象类型的默认值
propE: {
type: Object,
// 对象或者数组应当用工厂函数返回。
// 工厂函数会收到组件所接收的原始 props
// 作为参数
default(rawProps) {
return { message: 'hello' }
}
},
// 自定义类型校验函数
propF: {
validator(value) {
// The value must match one of these strings
return ['success', 'warning', 'danger'].includes(value)
}
}
}
}
如果 在vue中要用sass,需要安装这个模块,npm i sass
在子页面通过$emit进行传值,在父页面通过event事件进行获取值
子组件
//,在父页面通过event事件进行获取值,
//不要写小括号,会有一个event事件
子组件
父组件
$ref
子组件
parent
sidebar
子组件
Child
provide
和 inject
是 Vue.js 中用于跨组件通信的一对高级特性。它们允许祖先组件(提供者)向所有后代组件(使用者)传递数据,而不需要通过 props 或事件的方式。
provide ,inject 搭配组合式api使用,具备响应性
provide ,inject 搭配选项式使用, 没有响应性, 把app组件实例
父组件
navbar
{{ app.title}}
tabber
-
{{ item.name }}
在切换时创建新的组件实例通常是有意义的,但在这个例子中,我们的确想要组件能在被“切走”的时候保留它们的状态。要解决这个问题,我们可以用 `` 内置组件将这些动态组件包装起来:
在大型项目中,我们可能需要拆分应用为更小的块,并仅在需要时再从服务器加载相关组件。Vue 提供了 defineAsyncComponent
方法来实现此功能:
//----------------异步组件(按需加载)提高性能-----------------
import { defineAsyncComponent } from 'vue'
components: {
navbar,
tabber,
Center,
// 这样定义以后,这两个页面,在一开始不会加载,直到使用了之后才会有缓存
// **加载与错误提示**
Home: defineAsyncComponent( () => import('./components/Home.vue')),
List: defineAsyncComponent({
// // 加载组件
loader: () => import('./components/List.vue'),
// 加载异步组件时使用的组件
loadingComponent: LoadingComponent,
// 展示加载组件前的延迟时间,默认为 200ms
delay: 0,
// 加载失败后展示的组件
errorComponent: ErrorComponent,
// 如果提供了一个 timeout 时间限制,并超时了
// 也会显示这里配置的报错组件,默认值是:Infinity
timeout: 3000
}),
},