【Vue】高级系列(三)Vue相关小知识 - ref - props - mixin - 插件 - scoped - nextTick - 插槽slot

本文深入探讨Vue.js的高级特性,包括ref属性的使用来获取DOM元素或组件实例,props配置项详细解析,mixin(混入)的创建与应用,Vue插件的定义与调用,以及scoped样式的局限性。此外,详述了nextTick在响应式更新中的重要角色,并全面讲解了Vue的插槽机制:默认插槽、具名插槽和作用域插槽,展示如何实现组件间的灵活通信。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ref属性

  1. 被用来给元素或子组件注册引用信息(id的替代者)
  2. 应用在html标签上获取的是真实DOM元素,应用在组件标签上是组件实例对象(vc)
  3. 使用方式:
    1. 打标识:<h1 ref="xxx">.....</h1><School ref="xxx"></School>
    2. 获取:this.$refs.xxx
<template>
  <div>
    <h1 v-text="msg" ref="title"></h1>
    <button ref="btn" @click="showDOM">点我输出上方的DOM元素</button>
    <School ref="sch" />
  </div>
</template>

<script>
//引入School组件
import School from "./components/School";

export default {
     
     
  name: "App",
  components: {
     
      School },
  data() {
     
     
    return {
     
     
      msg: "欢迎学习Vue!",
    };
  },
  methods: {
     
     
    showDOM() {
     
     
      console.log(this.$refs.title); //真实DOM元素
      console.log(this.$refs.btn); //真实DOM元素
      console.log(this.$refs.sch); //School组件的实例对象(vc)
    },
  },
};
</script>

props配置项

  1. 功能:让组件接收外部传过来的数据

  2. 传递数据:<Demo name="xxx"/>

  3. 接收数据:

    1. 第一种方式(只接收):props:['name']

    2. 第二种方式(限制类型):props:{name:String}

    3. 第三种方式(限制类型、限制必要性、指定默认值):

props:{
   
   
	name:{
   
   
	type:String, //类型
	required:true, //必要性
	default:'老王' //默认值
	}
}

备注:props是只读的,Vue底层会监测你对props的修改,如果进行了修改,就会发出警告,若业务需求确实需要修改,那么请复制props的内容到data中一份,然后去修改data中的数据。

<template>
  <div>
    <h1>{
  
  { msg }}</h1>
    <h2>学生姓名:{
  
  { name }}</h2>
    <h2>学生性别:{
  
  { sex }}</h2>
    <h2>学生年龄:{
  
  { myAge + 1 }}</h2>
    <button @click="updateAge">尝试修改收到的年龄</button>
  </div>
</template>

<script>
export default {
     
     
  name: "Student",
  data() {
     
     
    console.log(this);
    return {
     
     
      msg: "我是一个尚硅谷的学生",
      myAge: this.age,
    };
  },
  methods: {
     
     
    updateAge() {
     
     
      this.myAge++;
    },
  },
  //简单声明接收
  // props:['name','age','sex']

  //接收的同时对数据进行类型限制
  /* props:{
			name:String,
			age:Number,
			sex:String
		} */

  //接收的同时对数据:进行类型限制+默认值的指定+必要性的限制
  props: {
     
     
    name: {
     
     
      type: String, //name的类型是字符串
      required: true, //name是必要的
    },
    age: {
     
     
      type: Number,
      default: 99, //默认值
    },
    sex: {
     
     
      type: String,
      required: true,
    },
  },
};
</script>

mixin(混入)

  1. 功能:可以把多个组件共用的配置提取成一个混入对象

  2. 使用方式:

    第一步定义混合:

{
   
   
    data(){
   
   ....},
    methods:{
   
   ....}
    ....
}

第二步使用混入:

  • 全局混入:Vue.mixin(xxx)
  • 局部混入:mixins:['xxx']

mixin.js

export const hunhe = {
   
   
  methods: {
   
   
    showName() {
   
   
      alert(this.name);
    },
  },
  mounted() {
   
   
    console.log("你好啊!");
  },
};
export const hunhe2 = {
   
   
  data() {
   
   
    return {
   
   
      x: 100,
      y: 200,
    };
  },
};

main.js

//引入Vue
import Vue from 'vue'
//引入App
import App from './App.vue'
import {
   
   hunhe,hunhe2} from './mixin'
//关闭Vue的生产提示
Vue.config.productionTip = false

Vue.mixin(hunhe)
Vue.mixin(hunhe2)


//创建vm
new Vue({
   
   
	el:'#app',
	render: h => h(App)
})

组件中

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值