Vue组件化(ref,props, mixin,.插件)详解


Posted in Vue.js onMay 15, 2022

1、ref属性

  • 被用来给元素或子组件注册引用信息(id的替代者)
  • 应用在html标签上获取的是真实DOM元素,应用在组件标签上是组件实例对象(vc)
  • 使用方式:

打标识:<h1 ref="xxx">.....</h1><School ref="xxx"></School>

获取:this.$refs.xxx

Vue组件化(ref,props, mixin,.插件)详解

2、props配置项

如果我们需要子组件收到父组件传来的数据,就可以使用props配置项。

<Student name="李四" sex="女" :age="18"/>

App通过标签属性为Student传递数据,需要在Student中接收传递来的数据,有三种接收方式。

第一种方式(只接收):

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

必要性与默认值只设置一个即可。

<!--Student-->
<template>
  <div>
    <h1>{{ msg }}</h1>
    <h2>学生姓名:{{ name }}</h2>
    <h2>学生性别:{{ sex }}</h2>
    <h2>学生年龄:{{ myAge }}</h2>
    <button @click="updateAge">尝试修改收到的年龄</button>
  </div>
</template>
<!--App-->
<template>
	<div>
		<Student name="张三" sex="男"/>
    	<Student name="李四" sex="女" :age="18"/>
	</div>
</template>

Vue组件化(ref,props, mixin,.插件)详解

props总结

  • 功能:让组件接收外部传过来的数据
  • 传递数据:<Demo name="xxx"/>
  • 接收数据:

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

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

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

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

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

3、mixin混入

混入用于抽离出多个组件的公共部分,包括函数和数据。在使用时候引入,能有效提高代码的复用性,混入本质上是一个对象

混入的使用有两种:

  • 局部混入,在需要引入混入的组件中引入即可,
  • 全局混入,即给所有的组件引入混入。

3.1、局部混入

我们定义混入,封装一个方法,以及携带一些数据。

定义一个mixin.js文件,编写混入以及提供外部引用的接口,即暴露。

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

接下来在SchoolStudent中引入混入

import {hunhe,hunhe2} from '../mixin'
mixins:[hunhe,hunhe2],

Vue组件化(ref,props, mixin,.插件)详解

3.2、全局混入

全局混入在main.js中配置

import {hunhe,hunhe2} from './mixin'
Vue.mixin(hunhe)
Vue.mixin(hunhe2)

mixin混入总结

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

第一步定义混合:

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

第二步使用混入:

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

4、插件

插件的应用与混入的应用差不多。

首先建立一个js文件,在里面建立插件,插件本质上也是一个对象。插件中要编写install函数,函数的第一个参数是Vue对象,也可以继续传递参数。

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)

插件总结

  • 功能:用于增强Vue
  • 本质:包含install方法的一个对象,install的第一个参数是Vue,第二个以后的参数是插件使用者传递的数据。
  • 定义插件:
对象.install = function (Vue, options) {
    // 1. 添加全局过滤器
    Vue.filter(....)
    // 2. 添加全局指令
    Vue.directive(....)
    // 3. 配置全局混入(合)
    Vue.mixin(....)
    // 4. 添加实例方法
    Vue.prototype.$myMethod = function () {...}
    Vue.prototype.$myProperty = xxxx
}

使用插件:Vue.use()

到此这篇关于Vue组件化(ref, props, mixin, 插件)详解的文章就介绍到这了,更多相关vue组件化内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!


Tags in this post...

Vue.js 相关文章推荐
Vue3+elementui plus创建项目的方法
Dec 01 Vue.js
vue $router和$route的区别详解
Dec 02 Vue.js
vue实现登录、注册、退出、跳转等功能
Dec 23 Vue.js
Vue中使用wangeditor富文本编辑的问题
Feb 07 Vue.js
详解Vue的七种传值方式
Feb 08 Vue.js
如何在 Vue 中使用 JSX
Feb 14 Vue.js
vue首次渲染全过程
Apr 21 Vue.js
Vue Element UI自定义描述列表组件
May 18 Vue.js
Element-ui Layout布局(Row和Col组件)的实现
Dec 06 Vue.js
一起来看看Vue的核心原理剖析
Mar 24 Vue.js
vue打包时去掉所有的console.log
Apr 10 Vue.js
ant design vue的form表单取值方法
Jun 01 Vue.js
vue postcss-px2rem 自适应布局
May 15 #Vue.js
VUE解决跨域问题Access to XMLHttpRequest at
vue使用watch监听属性变化
Apr 30 #Vue.js
vue-cli3.x配置全局的scss的时候报错问题及解决
vue项目如何打包之项目打包优化(让打包的js文件变小)
关于vue-router-link选择样式设置
Apr 30 #Vue.js
vue-treeselect的基本用法以及解决点击无法出现拉下菜单
Apr 30 #Vue.js
You might like
PHP新手上路(十)
2006/10/09 PHP
javascript 小型动画组件与实现代码
2010/06/02 PHP
php实现将上传word文件转为html的方法
2015/06/03 PHP
使用Appcan客户端自动更新PHP版本号(全)
2015/07/31 PHP
Yii框架日志记录Logging操作示例
2018/07/12 PHP
javascript while语句和do while语句的区别分析
2007/12/08 Javascript
基于jquery的从一个页面跳转到另一个页面的指定位置的实现代码(带平滑移动的效果)
2011/05/24 Javascript
用js实现table单元格高宽调整,兼容合并单元格(兼容IE6、7、8、FF)实例
2013/06/25 Javascript
thinkphp实现无限分类(使用递归)
2015/12/19 Javascript
JS设置下拉列表框当前所选值的方法
2015/12/22 Javascript
微信小程序 LOL 英雄介绍开发实例
2016/09/30 Javascript
AngularJS 在同一个界面启动多个ng-app应用模块详解
2016/12/20 Javascript
微信小程序之购物车功能
2020/09/23 Javascript
基于vue+ bootstrap实现图片上传图片展示功能
2017/05/17 Javascript
jQuery+Ajax请求本地数据加载商品列表页并跳转详情页的实现方法
2017/07/12 jQuery
js实现简单扫雷
2020/11/27 Javascript
一个基于flask的web应用诞生 用户注册功能开发(5)
2017/04/11 Python
简单学习Python多进程Multiprocessing
2017/08/29 Python
python+pandas分析nginx日志的实例
2018/04/28 Python
python如何生成各种随机分布图
2018/08/27 Python
pygame游戏之旅 计算游戏中躲过的障碍数量
2018/11/20 Python
Python 通过调用接口获取公交信息的实例
2018/12/17 Python
python 获取utc时间转化为本地时间的方法
2018/12/31 Python
Python实现串口通信(pyserial)过程解析
2019/09/25 Python
Django实现简单的分页功能
2021/02/22 Python
HTML5的hidden属性兼容老浏览器的方法
2014/04/23 HTML / CSS
美国排名第一的在线葡萄酒商店:Wine.com
2016/09/07 全球购物
描述RIP和OSPF区别以及特点
2015/01/17 面试题
华三通信H3C面试题
2015/05/15 面试题
教育科学研究生自荐信
2013/10/09 职场文书
九年级物理教学反思
2014/01/29 职场文书
大学班级干部的自我评价分享
2014/02/10 职场文书
关于雷锋的演讲稿
2014/05/10 职场文书
工艺技术员岗位职责
2015/02/04 职场文书
担保贷款承诺书
2015/04/30 职场文书
三好学生竞选稿
2015/11/21 职场文书