一、自定义指令
1、概念:自己定义的指令,可以封装一些dom操作,扩展额外功能
2、语法:
1、全局注册
Vue.directive('指令名',{
"inserted" (el){
el.focus()
}
})
2、局部注册
directives:{
"指令名":{
inserted(el){
//inserted会在元素被添加到页面中的时候触发
el.focus()
}
}
}
3、使用
v-指令名
3、自定义指令——指令的值
3.1、语法:在绑定指令时,可以通过 = 为指令绑定具体的参数值(注:传入的值最好是变量)
3.2、获取:
1、inserted(el, binding){
el.style.color = binding.value
}
4、自定义属性——参数
1、inserted:在元素添加到页面中时触发
2、update:在指令的值变化时触发
5、自定义属性——v-loading指令封装
5.1、实际开发中,发送需要时间,当数据未回来时,页面会处于空白状态,用户体验不好
5.2、需求:封装一个v-loading指令,实现加载中的效果
二、插槽
1、作用:让组件内部的一些结构支持自定义
2、语法:
1、当组件内有需要定制的结构部分时,改用<slot></slot>占位
2、使用组件时,在标签内部,传入结构替换slot如:
//子组件
<div>
<h3>tql</h3>
<span>你的名字是</span>
<slot></slot>
</div>
//父组件
<template>
<SonOne>饶欣</SonOne>
//饶欣会被插入插槽中
</template>
3、后备内容(默认值)
1、在slot中写入内容,便是默认值
如:
<slot>吕乐诚<slot>
4、具名插槽
1、需求:一个组件内有多处结构,需要外部传入标签,进行定制
2、语法:
定义时为多个slot使用name属性区分
<slot name="head"></slot>
<slot name="conteny"></slot>
使用时放在template中,配合v-slot:名字来分发对应标签
<template v-slot:head></template>
//也可以简写
<template #head></template>
5、作用域插槽
5.1、本质上是一个传参的语法
5.2、定义:在定义插槽时,是可以传值的,给插槽上绑定数据,将来使用组件时可以用。
5.3、使用步骤:
1、给slot标签,以添加属性的方式传值
<slot :id="item.id" msg="测试文本"></slot>
//所有属性,都会被收集到一个对象中
2、在template中,通过`#插槽名="obj"`接收,默认插槽名为default
<MyTable :list="list">
<template #default="obj">
<button @click="del(obj.id)">删除</button>
</template>
三、路由
1、单页应用程序(SPA)
(1)概念:所有功能在一个html页面上实现
(2)路由:路径和组件的映射关系
2、VueRouter
(1)作用:修改地址栏路径时,切换显示匹配的组件
(2)使用(5+2):
1、5个基本步骤
1、下载:下载VueRouter模块到当前工程,版本3.6.5
yarn add [email protected]
2、引入:
import VueRouter from 'vue-router'
3、安装注册:
Vue.use(VueRouter)
4、创建路由对象:
const router = new VueRouter()
5、注入,将路由对象注入到new Vue实例中,建立关联
new Vue({
render: h => h(App),
router
}).$mount('#app')
2、2个核心步骤
1、创建需要的组件(views目录),配置路由规则
Find.vue My.vue Friend.vue
import Find from './views/Find.vue'
import My from './views/My'
import Friend from './views/Friend'
const router = new VueRouter({
//这里面就是路由规则
routes:[
{ path:'/find', component:Find},
{ path:'/My', component:My},
{ path:'/friend',component:Friend}
//左边是地址栏路径,右边是组件
]
})
2、配置导航,配置路由出口(路径匹配的组件显示的位置)
<div class="footer_wrap">
<a href="#/find">发现音乐</a>
<a href="#/my">我的音乐</a>
<a href="#/friend">朋友</a>
</div>
<div class="top">
<router-view></router-view>
//router-view就是组件显示的位置
</div>
1、扩展:vue框架的规范化要求引入的组件名应该是语义性更强的多单词,若要消除此问题,可以在export default中添加name:'单词'
3、组件存放目录的问题:
(1)组件分类:
1、组件分为两类:页面组件 & 复用组件(但它们本质都是.vue文件,并无区别)
2、分目录的意义就是:更易维护
3、所以我们提出了规范化
src/views:页面组件-页面展示-配合路由用
src/components:复用组件-展示数据-常用于复用