Vue使用脚手架(ref、props、mixin、插件、scoped)(七)

news/2024/5/6 13:43:17/文章来源:https://blog.csdn.net/qq_48617322/article/details/126549029

系列文章目录

第一章:Vue基础知识笔记(模板语法、数据绑定、事件处理、计算属性)(一)
第二章:Vue基础知识(计算属性、监视属性、computed和watch之间的区别、绑定样式)(二)
第三章:Vue基础知识(条件渲染、列表渲染、收集表单数据、过滤器)(三)
第四章:Vue基础知识(内置指令、自定义指令、Vue生命周期)(四)
第五章:Vue基础知识之组件机制(非单文件组件、单文件组件)(五)
第六章:Vue创建脚手架(六)


文章目录

  • 系列文章目录
    • 一、ref属性
    • 二、props配置项(父子组件间通信)
    • 三、mixin(混入)
    • 四、插件
    • 五、scoped样式


一、ref属性

  • 被用来给元素或子组件注册引用信息(id的替代者
  • 应用在html标签上获取的是真实DOM元素,应用在组件标签上是组件实例对象(vc)
  • 使用方式:
    • 打标识:<h1 ref="xxx">.....</h1> 或 <School ref="xxx"></School>
    • 获取: 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配置项(父子组件间通信)

  • 功能: 让组件接收外部传过来的数据(可用于父子间通信)

  • 传递数据<Demo name="xxx"/>

  • 接收数据:

    • 第一种方式(只接收)props:['name']
    • 第二种方式(限制类型)props:{name:String}
    • 第三种方式(限制类型、限制必要性、指定默认值):
        props:{name:{type:String, //类型required:true, //必要性default:'老王' //默认值}}

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

父组件给子组件传递数据案例(代码片段):

App.vue

<template><div>//数值类型需要使用v-bind进行传递,否则传递过去的会为String类型<Student name="李四" sex="女" :age="18"/></div>
</template><script>import Student from './components/Student'export default {name:'App',components:{Student}}
</script>

Student.vue

<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>

运行结果:
在这里插入图片描述
上述案例实现了,父组件给子组件传递数据,那么是否可以利用props实现子组件给父组件传递数据呢?
那么就让父组件给子组件传递一个函数,让子组件在内部调用父组件传递过来的函数,通过给函数传递实参,将子组件的数据传递给父组件。
子组件给父组件传递数据案例(代码片段):
App.vue

<template><div class="app"><!-- 通过父组件给子组件传递函数类型的props实现:子给父传递数据 --><School :getSchoolName="getSchoolName"/></div>
</template><script>import Student from './components/Student'export default {name:'App',components:{Student},data() {return {msg:'你好啊!',studentName:''}},methods: {getSchoolName(name){console.log('App收到了学校名:',name)},},}
</script>

School.vue

<template><div class="school"><h2>学校名称:{{ name }}</h2><h2>学校地址:{{ address }}</h2><button @click="sendSchoolName">把学校名给App</button></div>
</template><script>
export default {name: "School",props: ["getSchoolName"],data() {return {name: "你猜",address: "你猜",};},methods: {sendSchoolName() {this.getSchoolName(this.name);},},
};
</script>

运行结果:

在这里插入图片描述

三、mixin(混入)

在开发中,我们会定义多个组件,而组件中避免不了出现属性和方法重复的情况,造成代码冗余;我们可以把重复的属性和方法定义在mixin中组件可以引入mixin,把这个mixin中的属性和方法当做基础结构。

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

  • 使用方式:
    第一步定义混入(共同属性和方法):

    	export const hunhe{data(){....},methods:{....}....}
    

    第二步使用混入:
    全局混入: Vue.mixin(xxx)​
    局部混入: mixins:['xxx']

main.js中全局使用

import {mixin1,mixin2} from './mixin'Vue.mixin(mixin1)Vue.mixin(mixin2)

其他组件中使用:

<script>
//引入
import {mixin1,mixin2} from './mixin'export default {data() {...},mixins: [mixin1, mixin2],
};
</script>

注意:

1.数据对象在内部会进行递归合并,并在发生冲突时以组件数据优先

2.同名钩子函数将合并为一个数组,因此都将被调用。另外,混入对象的钩子将在组件自身钩子之前调用

3.值为对象的选项,例如 methods、components 和 directives,将被合并为同一个对象。两个对象键名冲 突时,取组件对象的键值对

案例(代码片段):
App.vue

<template><div><School/><hr><Student/></div>
</template><script>import School from './components/School'import Student from './components/Student'export default {name:'App',components:{School,Student}}
</script>

mixin.js

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

Student.vue

<template><div><h2 @click="showName">学生姓名:{{ name }}</h2><h2>学生性别:{{ sex }}</h2>{{ x }}{{ y }}</div>
</template><script>
import { mixin1, mixin2 } from "../mixin";export default {name: "Student",data() {return {name: "张三",sex: "男",};},mixins: [mixin1, mixin2],
};
</script>

School.vue

<template><div><h2 @click="showName">学校名称:{{ name }}</h2><h2>学校地址:{{ address }}</h2>{{ x }}{{ y }}</div>
</template><script>
//引入
import { mixin1, mixin2 } from "../mixin";export default {name: "School",data() {return {name: "你猜",address: "你猜",x: 666,};},mixins: [mixin1, mixin2],
};
</script>

运行结果:
在这里插入图片描述
使用共同的点击事件
在这里插入图片描述
在这里插入图片描述

四、插件

插件通常用来为 Vue 添加全局功能。

  1. 功能: 用于增强Vue

  2. 本质: 包含install方法的一个对象,install的第一个参数是Vue,第二个以后的参数是插件使用者传递的数据。

  3. 定义插件:

    对象.install = function (Vue, options) {// 1. 添加全局过滤器Vue.filter(....)// 2. 添加全局指令Vue.directive(....)// 3. 配置全局混入(合)Vue.mixin(....)// 4. 添加实例方法Vue.prototype.$myMethod = function () {...}Vue.prototype.$myProperty = xxxx
    }
    
  4. 使用插件:Vue.use()

案例(代码片段):

plugins.js

export default {install(Vue,x,y,z){console.log(x,y,z)//全局过滤器Vue.filter('mySlice',function(value){return value.slice(0,4)})//定义全局指令Vue.directive('fbind',{//指令与元素成功绑定时(一上来)bind(element,binding){element.value = binding.value},//指令所在元素被插入页面时inserted(element,binding){element.focus()},//指令所在的模板被重新解析时update(element,binding){element.value = binding.value}})//定义混入Vue.mixin({data() {return {x:100,y:200}},})//给Vue原型上添加一个方法(vm和vc就都能用了)Vue.prototype.hello = ()=>{alert('你好啊')}}
}

main.js 中引入代码

//引入插件
import plugins from './plugins'
//应用(使用)插件
Vue.use(plugins,1,2,3)

School.vue 组件使用插件

<template><div><h2>学校名称:{{ name | mySlice }}</h2><h2>学校地址:{{ address }}</h2><button @click="test">点我测试一个hello方法</button><input type="text" v-fbind:value="name" /></div>
</template><script>
export default {name: "School",data() {return {name: "你猜",address: "你猜",};},methods: {test() {this.hello();},},
};
</script>

运行结果:
在这里插入图片描述
引入的全局方法生效
在这里插入图片描述

五、scoped样式

  1. 作用:让样式在局部生效,防止冲突。
  2. 写法:<style scoped></style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_4962.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

四、 java的对象和类

四、 java的对象和类 对象&#xff08;Object&#xff09;&#xff1a;对象是类的一个实例&#xff0c;有状态和行为。例如&#xff0c;一条狗是一个对象&#xff0c;它的状态有&#xff1a;颜色、名字、品种&#xff1b;行为有&#xff1a;摇尾巴、叫、吃等。类&#xff08;c…

物理服务器安装CentOS 7操作系统

目录 1、下载系统镜像 2、制作安装盘 2.1 方法一&#xff1a;光盘制作 2.2 方法二&#xff1a;U盘制作 3、更改bios启动顺序 4、安装CentOS 7操作系统 4.1 安装命令选择&#xff0c;及常见错误解决 4.2 语言选择 4.3 时区选择 4.4 软件选择 4.5 安装位置选择 4.6 手…

猿创征文|【C++游戏引擎Easy2D】学C++还不会绘制一个简单的二维图形?一篇文章教会你

&#x1f9db;‍♂️iecne个人主页&#xff1a;&#xff1a;iecne的学习日志 &#x1f4a1;每天关注iecne的作品&#xff0c;一起进步 &#x1f4aa;学C必看iecne 本文专栏&#xff1a;【C游戏引擎】. &#x1f433;希望大家多多支持&#x1f970;一起进步呀&#xff01; ✨前…

Apache Maven 3.6.0的下载安装和环境配置(详细图解+不限速下载链接)

标题工具/原料 apache-maven-3.6.0 下载地址 云盘不限速下载 或者进入官网按下图下载 方法/步骤一 安装 打开压缩包&#xff0c;将maven压缩包解压至软件安装处&#xff0c;建议D根目录或其他&#xff0c;记住安装位置 类似于 方法/步骤二 环境变量配置 变量 1.新建变…

Eolink 通过可信云权威认证,数据保护能力业内领先!

Eolink 正式通过由中国信息通信研究院组织发起的可信云评估考核&#xff0c;在数据安全保障领域获得权威认证&#xff0c;并荣获 “企业级 SaaS 服务” 认证证书。 在云时代&#xff0c;保护用户数据安全、预防隐私泄露是数字化企服厂商的重中之重。Eolink 作为一个 API 在线管…

计算机毕业设计ssm+vue基本微信小程序的个人健康管理系统

项目介绍 首先,论文一开始便是清楚的论述了小程序的研究内容。其次,剖析系统需求分析,弄明白“做什么”,分析包括业务分析和业务流程的分析以及用例分析,更进一步明确系统的需求。然后在明白了小程序的需求基础上需要进一步地设计系统,主要包罗软件架构模式、整体功能模块、数…

IIC协议详解

文章目录1 IIC简介2 IIC物理层2.1 IIC硬件2.2 IIC协议特点3 IIC协议层4数据传输4.1 IIC写数据4.2 IIC读数据1 IIC简介 IIC(Inter&#xff0d;Integrated Circuit)总线是一种由 NXP&#xff08;原 PHILIPS&#xff09;公司开发的两线式串行总线&#xff0c; 用于连接微控制器及其…

s19.基于 Kubernetes v1.25.0(kubeadm) 和 Docker 部署高可用集群(一)

基于 Kubernetes v1.25.0 和 Docker 部署高可用集群 主要内容 Kubernetes 集群架构组成容器运行时 CRIKubernetes v1.25 新特性Kubernetes v1.24 之后不再支持 Docker 的解决方案Kubernetes v1.25 高可用集群架构基于 Kubernetes v1.25.0 和 Docker 部署高可用集群实战案例 …

Redis持久化机制分析

什么是持久化&#xff1f; 简单来说持久化就是将数据保存到磁盘&#xff0c;让即使服务宕机、重启、断电等操作后数据仍热存在&#xff0c;并且是完整的。 1、为什么要持久化&#xff1f; 1、Redis是一个内存数据库&#xff0c;宕机之后存储在内存的数据会消失。2、Redis重启…

传述最详细的干货,让简历面试不再成为你找工作的绊脚石

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是「奇点」&#xff0c;江湖人称 singularity。刚工作几年&#xff0c;想和大家一同进步&#x1f91d;&#x1f91d; 一位上进心十足的【Java ToB端大厂…

【蓝桥杯省赛真题37】Scratch三国演义字数统计 少儿编程scratch编程蓝桥杯省赛真题讲解

​​​​​​​ 目录 scratch三国演义字数统计 一、题目要求 编程实现 二、案例分析 1、角色分析

Linux内核设计与实现 第三章 进程管理

3.1进程 实际上&#xff0c;进程就是正在执行的程序代码的实时结果。 进程是出于执行期的程序以及相关的资源的总称。 进程的另一个名字是任务。 进程不仅仅局限于一段可执行程序代码通常进程还要包含其他资源&#xff0c;像打开的文件&#xff0c;挂起的信号&#xff0c;内核…

springboot项目整理(持续更新)

SpringSecurity 1.导入依赖&#xff1a; 在pom.xml中导入依赖&#xff0c;再访问页面就会出现login&#xff0c;这是SpringSecurity自己写的页面&#xff0c;用于登录认证 <dependency><groupId>org.springframework.boot</groupId><artifactId>spr…

整合流量与资源的分享购商业模式,实现整个生态布局

大多数企业都很容易忽视一个市场&#xff0c;就是我们的日常生活服务板块&#xff0c;所谓民以食为天&#xff0c;我们应该顺应人们的生活习惯而做出来的电商商业模式&#xff0c;才是最贴合民心的&#xff0c;也能够从用户的最基础的需求出发来为其打造商业模式。 将目标放在生…

Room (三) RecyclerView 呈现列表数据

1. 用到的组件 Room&#xff0c;ViewModel&#xff0c;LiveData&#xff0c;Repository&#xff0c;AsyncTack 2. Module 中 build.gradle 文件中添加 dependencies {def room_version "2.4.3"implementation "androidx.room:room-runtime:$room_version&quo…

【Linux操作系统】-- 多线程(三)-- 线程池+单例模式

目录 线程池 场景 代码实现 线程安全的单例模式 懒汉实现方式和懒汉实现方式 饿汉方式实现单例模式 懒汉方式实现单例模式 实战代码演练单例模式 线程池 在C中用户使用new/malloc都是向操作系统OS申请的&#xff0c;在系统的角度&#xff0c;就相当于new/malloc在底层封…

MySQL之临时表

写在前面 本文一起看下MySQL的临时表。 1&#xff1a;什么是临时表 通过create temporary table t语句创建的表&#xff0c;就是临时表&#xff0c;临时表的临时体现在其是其生命周期是和会话一样的&#xff0c;当会话结束&#xff0c;即连接关闭时MySQL会自动将创建的临时表…

氨丙基咪唑离子液体(AMIBr)改性纤维素气凝胶吸附剂(CAgAMIBr)的实验要求

氨丙基咪唑离子液体(AMIBr)改性纤维素气凝胶吸附剂(CAgAMIBr)的实验要求 离子液体(ILs)&#xff0c;是完全由离子组成的液体&#xff0c;可以进一步定义为熔点低于100C的熔盐。 离子液体是在室温或接近室温下可呈现液体的液态有机盐。离子液体因具有一些优良的特性使其在分离…

树的直径 树形dp+2次dfs

题目描述 给定一棵树 T &#xff0c;树 T 上每个点都有一个权值。 定义一颗树的子链的大小为&#xff1a;这个子链上所有结点的权值和 。 请在树 T 中找出一条最大的子链并输出。 输入描述: 第一行输入一个 n,1≤n≤105。 接下来一行包含n个数&#xff0c;对于每个数 ai,−10^5…

我赢助手小技巧:学会这三招,爆款内容视频完播率提高50%(下)

上一篇我们说了爆款内容的四大共性和底层逻辑&#xff0c;今天我们来看一看如何去设置标题、封面和剧情&#xff0c;实现视频的完播率。 第三个技巧叫内容高潮。 要在3秒钟之内让用户兴趣高涨&#xff0c;把这样的脚本写出来&#xff0c;怎么样去做&#xff1f;你要把特效、悬…