Vue 学习笔记-2022/12/09
Vue 组件深入
一、响应性组件 props 和 组件刷新
父组件
:totalPage="totalPage"
:defaultCurrentPage="currentPage"
/>
子组件
当前页: {{ currentPage }}
二、 组件的数据流向
在子组件里最好使用
emit 去触发事件
其他属性则可以用 props 进行传递
三、组件的生命周期
和
Vue的生命周期保持一致
Vue的生命周期保持一致
四、Provide / Inject 给深度组件传值
provide 在我的个人理解就是出值
Inject 则是接收值
provide 有两种用法
// 可以使用 this 但是必须为函数 内容是响应式
provide() {
return {
title: this.movie.title,
};
},
// 直接返回 内容是静态的
provide: {
title: "测试电影",
},
Inject 用法
export default {
// 在数组里定义 provide 的属性名
inject: ["title"],
};
五、在传递slot模板中访问子组件的属性
子组件
父组件
{{ contact.name }}
{{ contact.email }}
六、组件支持 v-model
1.单个 v-model 绑定
父组件
{{ searchTerm }}
子组件
2.多个 v-model 绑定
子组件
父组件
v-model:searchTerm="searchTerm"
v-model:category="category"
/>搜索词:{{ searchTerm }}
类别:{{ category }}
七、Ref实例
万不得已使用,这个会破坏组件数据流向
1.获取Dom实例
2.获取组件实例
子组件
父组件
八、自定义指令
自定义组件实际上是就是一系列的生命周期的钩子
在不同生命周期进行操作数据
app.directive("fsize", {
mounted(el, binding) {
el.style.fontSize = binding.value + "px";
},
// 这样在 data 更新时,才会触发指令更新
updated(el, binding) {
el.style.fontSize = binding.value + "px";
},
});
// 如果 mounted 和 updated 的代码相同,可以合并为一个:
app.directive("fsize", (el, binding) => {
el.style.fontSize = binding.value + "px";
});
// 带有 args:
app.directive("fsize", (el, binding) => {
el.style.fontSize = binding.value + (binding.arg || "px");
});
// 进行使用
这是一个段落
// [unit] 为响应式数据
九、动态组件
1.设置动态的 h 标签
父组件
一级标题 二级标题 三级标题 四级标题 五级标题 六级标题
2.动态切换组件
- ProfileForm.vue
- RegisterForm.vue
- App.vue
十、组件传送
1. teleport 传送
X消息提示框组件
2.teleport 多次传送
根据自定义的
Css
进行追加十一、编程式的模板
1.使用渲染函数
使用它可以直接在模板里使用
JavaScript 语法
JavaScript 语法
难搞 感觉这个东西麻烦的很
2.渲染函数中使用指令
十二、Mxins 组件配置
现在不推荐使用了,有更好的进行替代了
其实在我的个人理解
mixin 配置就和个普通的对象一样 只是别的组件可以进行复用而已 只需要在
mixin 配置就和个普通的对象一样 只是别的组件可以进行复用而已 只需要在
mixins: [xxx]
导入即可,当然是我的个人理解,可能有错1. 普通使用
// 导出
const PaginationMixin = {
props: ["totalPage", "defaultCurrentPage"],
data() {
return {
currentPage: this.defaultCurrentPage,
};
},
methods: {
changePage(page) {
this.currentPage = page;
},
},
};
export default PaginationMixin;
// 导入
import PaginationMixin from "../mixins/PaginationMixin";
export default {
mixins: [PaginationMixin],
};
如果
mixin 的属性和组件的属性发生的冲突 则组件的属性会覆盖 mixin 的相同属性,不同的属性则会进行合并
如果 mixin 的生命周期钩子和 组件的生命周期相同,这个时候二者都会执行,不过 mixin的钩子优先级更高会先执行
2. 全局 mixin 配置
全局
mixin 配置 适合给组件做通用的配置,或者是自定义的配置
mixin 配置 适合给组件做通用的配置,或者是自定义的配置
// 需要用 this 访问
app.mixin({
siteTitle: "我的 Vue 应用",
computed: {
siteTitle() {
return this.$options.siteTitle;
},
},
});
十三、异步组件
1.组件异步加载
import { defineAsyncComponent } from "vue";
// es6 异步导入 + defineAsyncComponent 实现第一次挂载时导入
const ProductPage = defineAsyncComponent(() =>
import("./components/ProductPage.vue")
);
十四、组件错误处理
1.全局处理
app.config.errorHandler = (err, vm, info) => {
console.log(err);
console.log(vm);
console.log(info);
};
2.局部组件处理(错误边界)
// 错误捕获生命周期钩子
errorCaptured(err, instance, info) {
},
此处评论已关闭