vue
基础
基础
安装 npm create vue@latest
- 响应式数据
ref、reactive
- 计算属性
computed
- 监听元素
watch(value,(new,old)=>{})
- 组件创建完成初始化生命周期
onMounted
全局变量
main.js 挂载
app.provide('$text',"成功");
// 使用
import { inject } from "vue";
const text = inject("$text");
组件
全局注册组件
app.component('MyComponent', MyComponent)
父传子组件
查看代码
js
// 父组件
<component value="传递数据" />;
// 子组件
import { defineProps } from "vue";
const props = defineProps(["value"]);
console.log(props.value);
- 父组件调用子组件事件
查看代码
js
// 子组件
<button @click="$emit('submit1')">按钮1</button>
import { defineEmits } from 'vue';
const emits = defineEmits(['submit1']);
// 父组件
<buttonComponenst @submit1="submit1"/>
- 单插槽
js
// 子组件
<slot></slot>
// 父组件
<buttonComponenst/>这里可以放任何内容</buttonComponenst>
- 多插槽
js
// 子组件
<slot name="slot1"></slot>
// 父组件
<template #slot1>
插槽1的内容放这里
</template>
路由
js
// 404页面
{
path: '/:pathMatch(.*)',
component: '/error',
}
js
// 嵌套路由
children: [{ path: "/", name: "user", component: UserHome }];
js
// 路由元信息
meta: { requiresAuth: true,title:"页面名字" }
js
// 路由跳转
// 传值
import { useRouter } from "vue-router";
const router = useRouter();
router.push({ path: "/indexView", query: { id: 123 } });
// 接收
import { useRoute } from "vue-router";
const route = useRoute();
const id = route.query.id;
js
// 前置路由
router.beforeEach((to, from, next) => { }
// to:将要进入的路由
// from:离开的路由
// next():进入路由
// next(false):中断当前导航
// next('路径'):强行跳转路由
// 后置路由
router.afterEach
js
// 解决路由刷新404:
// 修改nginx部署文件nginx.conf
// try_files $uri $uri/ /index.html;
当前选中路由 css 类
.router-link-active
始终跳转到页面顶部
const router = createRouter({
scrollBehavior(to, from, savedPosition) {
return { top: 0 };
},
});
路由动画
在路由组件中一定要添加个 div 包裹全部内容
设置路由显示
js
<router-view v-slot="{ Component }">
<transition name="scale" mode="out-in">
<component :is="Component" />
</transition>
</router-view>
css 设置路由动画
放大缩小
js
.scale-enter-active,
.scale-leave-active {
transition: all 0.5s ease;
}
.scale-enter-from,
.scale-leave-to {
opacity: 0;
transform: scale(0.9);
}
渐隐渐现
js
.scale-enter-active,
.scale-leave-active {
transition: opacity 0.5s ease;
}
.scale-enter-from,
.scale-leave-to {
opacity: 0;
}
从右往左
js
// 更改X/Y轴控制方向
// 更改正负角度控制左右方向
.scale-enter-active,
.scale-leave-active {
transition: all 0.25s ease-out;
}
.scale-enter-from {
opacity: 0;
transform: translateX(30px);
}
.scale-leave-to {
opacity: 0;
transform: translateX(-30px);
}