js-this.$emit()方法,组件A调用组件B中的newB()方法,4种路由跳转

(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可为正整数或负整数

this.$on和this.$emit是Vue.js组件之间通信的方法。 this.$on用于在当前组件上监听一个自定义事件。当该事件被触发时,会执行对应的回调函数。可以通过this.$on(eventName, callback)来绑定事件监听器。 this.$emit用于触发一个自定义事件。可以通过this.$emit(eventName, data)来触发事件,并传递数据给其他组件。 在给定的代码示例,Student组件通过this.$bus.$emit('hello', 666)触发了一个名为hello的自定义事件,并传递了数据666给School组件。 而School组件则通过this.$bus.$on('hello', (data) => { console.log('我是School组件,我收到了数据:', data); })监听了hello事件,并在回调函数打印出收到的数据。 这样,Student组件通过this.$emit触发了一个事件,而School组件通过this.$on监听到了这个事件,并执行了相应的代码,实现了组件之间的通信。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [[vue] 全局事件总线 this.$bus.$emit this.$bus.$on ,可以实现任意组件间通信](https://blog.csdn.net/qq_14993591/article/details/121221114)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [组件之间使用this.$bus.$emit(),this.$bus.$on(), this.$bus.$off(event)](https://blog.csdn.net/Cool_so_cool/article/details/116234145)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值