(1) this.$emit()方法
this.$emit()方法 向父组件发送自定义事件custom,传递数据,父组件监听自定义事件执行对应的逻辑。
子组件
<!-- 子组件 -->
<template>
<button @click="handleButtonClick">点击触发事件</button>
</template>
<script>
export default {
name:'ChildComponent',
methods: {
handleButtonClick() {
// 触发自定义事件,并传递数据给父组件
this.$emit('custom', 'Hello, World!');
}
}
}
</script>
父组件
<!-- 父 -->
<template>
<div>
<ChildComponent @custom="handleCustomEvent"></ChildComponent>
</div>
</template>
<script>
//导入子组件
import ChildComponent from '@/components/ChildComponent'
export default {
name: 'father',
data() {
return {
}
},
components: {
ChildComponent
},
methods: {
handleCustomEvent(data) {
// 处理自定义事件的逻辑
console.log(data); // 输出:'Hello, World!'
}
}
}
</script>
(2)组件A调用组件B中的newB()方法
组件A
<!-- 组件A 组件A调用组件B中的newB()方法-->
<script>
import componentB from './componentB'
export default {
name: 'componentA',
components:{
componentB
},
methods:{
newA(){
// 导入需要调用的方法对应的组件.methods.对应的方法名
componentB.methods.newB();
}
}
</script>
组件B
<!-- 组件B -->
<script>
export default {
name:'componentB',
methods: {
newB() {
},
}
}
</script>
(3)路由跳转
1.router-link
<!-- 方式1.router-link -->
<!-- 1. 不带参数 -->
<router-link :to="{name:'home'}">
<router-link :to="{path:'/home'}"> //name,path都行, 建议用name
// 注意:router-link中链接如果是'/'开始就是从根路由开始,如果开始不带'/',则从当前路由开始。
2.带参数
<router-link :to="{name:'home', params: {id:1}}">
// params传参数 (类似post)
// 路由配置 path: "/home/:id" 或者 path: "/home:id"
// 不配置path ,第一次可请求,刷新页面id会消失
// 配置path,刷新页面id会保留
// html 取参 $route.params.id
// script 取参 this.$route.params.id
<router-link :to="{name:'home', query: {id:1}}">
// query传参数 (类似get,url后面会显示参数)
// 路由可不配置
// html 取参 $route.query.id
// script 取参 this.$route.query.id
2.this.$router.push()与this.$router.replace()
<!-- 方式2.this.$router.push()与this.$router.replace()差不多 -->
1. 不带参数
this.$router.push('/home')
this.$router.push({name:'home'})
this.$router.push({path:'/home'})
2. query传参
this.$router.push({name:'home',query: {id:'1'}})
this.$router.push({path:'/home',query: {id:'1'}})
// html 取参 $route.query.id
// script 取参 this.$route.query.id
3. params传参
this.$router.push({name:'home',params: {id:'1'}}) // 只能用 name
// 路由配置 path: "/home/:id" 或者 path: "/home:id" ,
// 不配置path ,第一次可请求,刷新页面id会消失
// 配置path,刷新页面id会保留
// html 取参 $route.params.id
// script 取参 this.$route.params.id
4. query和params区别
query类似 get, 跳转之后页面 url后面会拼接参数,类似?id=1, 非重要性的可以这样传, 密码之类还是用params刷新页面id还在
params类似 post, 跳转之后页面 url后面不会拼接参数 , 但是刷新页面id 会消失
3.this.router.go(n)以及this.router.back()
go(-1): 原页面表单中的内容会丢失;
this.$router.go(-1):后退+刷新;
this.$router.go(0):刷新;
this.$router.go(1) :前进
back(): 原页表表单中的内容会保留;
this.$router.back():后退 ;
this.$router.back(0) 刷新;
this.$router.back(1):前进
4.三者区别
this.$router.push
跳转到指定url路径,并向history栈中添加一个记录,点击后退会返回到上一个页面
this.$router.replace
跳转到指定url路径,但是history栈中不会有记录,点击返回会跳转到上上个页面 (就是直接替换了当前页面)
this.$router.go(n)
向前或者向后跳转n个页面,n可为正整数或负整数