Vue 学习笔记-2022/12/09

Vue 组件深入

一、响应性组件 props 和 组件刷新

ZMLFNKAZU9H_2L6C0UVDFIR




二、 组件的数据流向


在子组件里最好使用
emit 去触发事件

其他属性则可以用 props 进行传递

三、组件的生命周期

四、Provide / Inject 给深度组件传值

provide 在我的个人理解就是出值

Inject 则是接收值

provide 有两种用法

// 可以使用 this 但是必须为函数 内容是响应式 
provide() {
    return {
      title: this.movie.title,
    };
  },
// 直接返回 内容是静态的
provide: {
  title: "测试电影",
},

Inject 用法

export default {
  // 在数组里定义 provide 的属性名
  inject: ["title"],
};
五、在传递slot模板中访问子组件的属性



六、组件支持 v-model
1.单个 v-model 绑定




2.多个 v-model 绑定


七、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.动态切换组件
  1. ProfileForm.vue


  1. RegisterForm.vue


  1. App.vue



十、组件传送
1. teleport 传送


    
X
消息提示框组件
2.teleport 多次传送

根据自定义的
Css进行追加

十一、编程式的模板
1.使用渲染函数

使用它可以直接在模板里使用
JavaScript 语法

难搞 感觉这个东西麻烦的很

2.渲染函数中使用指令
十二、Mxins 组件配置

现在不推荐使用了,有更好的进行替代了

其实在我的个人理解
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 配置 适合给组件做通用的配置,或者是自定义的配置

// 需要用 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.局部组件处理(错误边界)

F)JRYX4YIPS9JCXAQ(VSPK7

 // 错误捕获生命周期钩子
  errorCaptured(err, instance, info) {
  },
最后修改:2023 年 10 月 05 日
如果觉得我的文章对你有用,请随意赞赏