vue中的$EventBus.$emit、$on的应用

今天在项目中遇到的一个需求:html

  在一个选项卡功能的页面,出现的问题是,当点击选项卡的某个选项时,会同时加载整个选项卡的数据,自己产品就很大,数据不少,因此这个问题没法忽略;node

仔细研究下发现,当刚进入页面时,只会加载当前一个tab的数据,这样是正常的,但当再次点击别的tab时,以前tab的接口就都连带着再次请求一边,只要是不刷新页面,就一直切换tab,一直会有前边的tab数据接口从新请求,项目中tab实现是用的饿了么ui的tab选项卡,在研究了饿了么ui以后发现使用上没有什么问题,并且是子组件的v-if切换web

复制代码
1     <el-tabs v-model="activeName" @tab-click="tabClick" class="assetsIndex">
2       <el-tab-pane label="IP地址" name="ip" class="assetsIndextitle">
3         <FlawIp v-if="ipShow" />
4       </el-tab-pane>
5       <el-tab-pane label="网站" name="web" class="assetsIndextitle">
6         <FlawWeb v-if="webShow" />                                  index文件
7       </el-tab-pane>
8     </el-tabs>
复制代码

这样的话,切换的时候直接就将dom节点删除了,当时在网上搜的怀疑是dom节点删除,但事件没有移除,但后来看了下,以前没有用过监听,要是使用移除监听应该很差办,因此整理下了思路发现,子组件是用$on接受参数的$emit发送的值,$emit,$on存在的bug就是会将以前的值累加,因此,它会将以前接口再走一遍,可能小项目看不出来什么,但项目一旦大了,一个页面就有好多接口,可能直接就崩了,因此,在接收参数以前必定要清楚下以前的值便可dom

复制代码
1  this.$EventBus.$emit('nodeClick', {
2         id: 1                                别的文件发送id这个参数
3       })

this.$EventBus.$off("nodeClick")
this.$EventBus.$on("nodeClick", ({ id }) => {
      this.getAccount(id);                         子组件接收参数
    });

 

复制代码

 

2019-10-22网站

---恢复内容结束---ui

今天在项目中遇到的一个需求:this

  在一个选项卡功能的页面,出现的问题是,当点击选项卡的某个选项时,会同时加载整个选项卡的数据,自己产品就很大,数据不少,因此这个问题没法忽略;spa

仔细研究下发现,当刚进入页面时,只会加载当前一个tab的数据,这样是正常的,但当再次点击别的tab时,以前tab的接口就都连带着再次请求一边,只要是不刷新页面,就一直切换tab,一直会有前边的tab数据接口从新请求,项目中tab实现是用的饿了么ui的tab选项卡,在研究了饿了么ui以后发现使用上没有什么问题,并且是子组件的v-if切换code

复制代码
1     <el-tabs v-model="activeName" @tab-click="tabClick" class="assetsIndex">
2       <el-tab-pane label="IP地址" name="ip" class="assetsIndextitle">
3         <FlawIp v-if="ipShow" />
4       </el-tab-pane>
5       <el-tab-pane label="网站" name="web" class="assetsIndextitle">
6         <FlawWeb v-if="webShow" />                                  index文件
7       </el-tab-pane>
8     </el-tabs>
复制代码

这样的话,切换的时候直接就将dom节点删除了,当时在网上搜的怀疑是dom节点删除,但事件没有移除,但后来看了下,以前没有用过监听,要是使用移除监听应该很差办,因此整理下了思路发现,子组件是用$on接受参数的$emit发送的值,$emit,$on存在的bug就是会将以前的值累加,因此,它会将以前接口再走一遍,可能小项目看不出来什么,但项目一旦大了,一个页面就有好多接口,可能直接就崩了,因此,在接收参数以前必定要清楚下以前的值便可htm

复制代码
1  this.$EventBus.$emit('nodeClick', {
2         id: 1                                别的文件发送id这个参数
3       })

this.$EventBus.$off("nodeClick")
this.$EventBus.$on("nodeClick", ({ id }) => {
      this.getAccount(id);                         子组件接收参数
    });
复制代码

转:https://www.cnblogs.com/yanyanliu/p/11723324.html

相关文章
相关标签/搜索