Vue github案例,全局事件总线,pubsub-js消息订阅与发布
taotaoit Vue 2022-12-08 676 0
关于本站

“最难不过坚持”

本人承接扒站仿站,php网站维护,病毒查杀,网站编辑,网站改版,html制作

有需要网站维护,改版,病毒查杀,网站编辑,网站备案,html制作等相关的工作可以联系我。
本人有多年相关工作经验,也可提供免费咨询,交个朋友。
有需要探讨问题的朋友,也可以加我微信,共同探讨!
微信:15011482830 QQ:408917339

6449080 2613 39
最新评论
https://jueru.net/
评 留言
:weixiao:
评 留言
:shuijiao: :weiqu: :zhenbang: :leng:
评 留言
:yiwen: :yiwen: :yiwen: :yiwen:
评 EasySass: could not generate CSS file. See Output panel for details.
这个业务逻辑多少都有点奇怪了,阅读浏览次数增值在新闻详情页的控制器方法里setInc,这怎么还写进模型事件里了。如果非要用onAfterRead也可以,把新闻文章的内容单独分出来一个news_content表,然后把它和news做关联,然后给news_content表的onAfterRead事件做增值处理,这样点进新闻页内查询到文章内容时才会触发它。
评 TP6模型事件-查询后onAfterRead不好用
文章标签更多
ThinkPHP (254)
Mysql (58)
DedeCms (33)
jQuery (67)
证件照 (1)
setInc (4)
setDec (4)
onclick (5)
打开边栏(ESC) 关闭边栏(ESC)

Vue github案例,全局事件总线,pubsub-js消息订阅与发布

效果图:

from clipboard

网上找到一篇详细的文章,记录一下:https://blog.csdn.net/m0_53022813/article/details/127418134

以下代码是成品,包含全局事件总线和pubsub-js消息订阅与发布两种方式

1,main.js 安装全局事件总线

import Vue from 'vue'
import App from './App.vue'

Vue.config.productionTip = false

new Vue({
  render: h => h(App),
  beforeCreate(){
    Vue.prototype.$bus = this // 安装全局事件总线
  }
}).$mount('#app')
2,App组件

<template>
  <div id="app">
    <Search/>
    <List/>
  </div>
</template>

<script>
import Search from './components/Search.vue'
import List from './components/List.vue'

export default {
  name:'App',
  components:{
    Search,List
  }
}
</script>

<style>

</style>
3,List组件-全局事件总线绑定自定义事件/pubsub-js订阅消息

<template>
  <div>
    <!-- 展示用户列表 -->
    <ul v-show="info.users.length">
      <li v-for="user in info.users" :key="user.id">
        <a href="user.html_url" target="_blank">
          <img :src="user.avatar_url" alt="">
        </a>
        <br>
        {{user.login}}
      </li>
    </ul>
    <!-- 展示欢迎词 -->
    <h2 v-show="info.isFirst">欢迎使用!</h2>
    <!-- 展示加载中 -->
    <h2 v-show="info.isLoading">加载中...</h2>
    <!-- 展示错误信息 -->
    <h2 v-show="info.errMsg">{{info.errMsg}}</h2>
  </div>
  
</template>

<script>
import pubsub from 'pubsub-js'

export default {
  name:'List',
  data(){
    return {
      info:{
        isFirst:true, // 是否初次展示
        isLoading:false, // 是否加载中
        errMsg:'', // 错误信息
        users:[]
      }
    }
  },
  mounted() {
    // 方式一:全局事件总线
    // this.$bus.$on('updateListData',(dataObj)=>{
    //   // this.info = dataObj // 这样isFirst属性会丢失
    //   this.info = {...this.info,...dataObj} // 合并对象,重复的属性以后面为主
    // })
    // 方式二:pubsub-js消息订阅与发布
    this.updateListDataId = pubsub.subscribe('updateListData',(msg,dataObj)=>{
      this.info = {...this.info,...dataObj}
    })
  },
  beforeDestroy() {
    // this.$bus.$off('updateListData') // 解绑
    pubsub.unsubscribe(this.updateListDataId) // 取消订阅
  },
}
</script>

<style scoped>
  li{
    float: left;
    width: 200px;
    list-style: none;
    text-align: center;
  }
  li img{
    width: 100%;
    height: 200px;
  }
</style>
4,Search组件-触发全局事件总线事件/pubsub-js发布消息

<template>
  <div>
    <input type="text" v-model="keyword">
    <button @click="searchUsers">搜索</button>
  </div>
</template>

<script>
import axios from 'axios'

import pubsub from 'pubsub-js'

export default {
  name:'Search',
  data(){
    return {
      keyword:''
    }
  },
  methods:{
    searchUsers(){
      // 全局事件总线
      // 请求前更新List数据-欢迎使用变成加载中
      // this.$bus.$emit('updateListData',{isFirst:false,isLoading:true,errMsg:'',users:[]})
      // axios.get(`https://api.github.com/search/users?q=${this.keyword}`).then(
      //   response=>{
      //     // console.log(response.data);
      //     this.$bus.$emit('updateListData',{isLoading:false,errMsg:'',users:response.data.items})
      //   },
      //   error=>{
      //     // console.log(error.message);
      //     this.$bus.$emit('updateListData',{isLoading:false,errMsg:error.message,users:[]})
      //   }
      // )
      // 消息订阅与发布
      pubsub.publish('updateListData',{isFirst:false,isLoading:true,errMsg:'',users:[]})
      axios.get(`https://api.github.com/search/users?q=${this.keyword}`).then(
        response=>{
          // console.log(response.data);
          pubsub.publish('updateListData',{isLoading:false,errMsg:'',users:response.data.items})
        },
        error=>{
          // console.log(error.message);
          pubsub.publish('updateListData',{isLoading:false,errMsg:error.message,users:[]})
        }
      )
    }
  }
}
</script>

<style>

</style>


版权声明:本站原创文章,允许自由转载。

相关推荐
接口返回request failed with status code 500错误
Vue | 2023-02-20 2635
接口返回request failed with status code 500错误 登录界面,验证账号密码成功,但是返回500错误 可能原因:linux服务器,用tp5搭建的后台及接口,会生成一部分缓存文件,但是linux默认没有权限创建数据,所以,只要在缓存文件夹runtime添加写的权限即可
vue项目npm run serve默认浏览器打开
Vue | 2022-11-16 1891
1、在vue项目中,输入命令行  npm run serve   浏览器实现自动打开功能,需要添加 在配置文件(package.json)中添加 --open 2、浏览器自动打开后,可能会出现网址0.0.0.0:8080页面错误,见图 3、解决方法: 在--open后面再加上--...
评论:0条
评论加载中...
发表评论