首页 > 其他分享 >Vue练手项目todoList事件总线写法

Vue练手项目todoList事件总线写法

时间:2022-10-12 22:35:39浏览次数:73  
标签:练手 vue todoList bus 总线 item Vue 事件

源码仓库地址

https://gitee.com/zyqwasd/todo-list-vue

运行

1. git clone [email protected]:zyqwasd/todo-list-vue.git

2. npm install 

3. npm run serve

效果图

注意事项

1. 在定义事件总线的时候  你可以直接在 Vue.prototype.$bus = new Vue() 来挂载一个新的vm 

2. 当然你也可以像我一样下面这种定义方法 但是一定要在beforeCreate钩子函数就是刚刚创建了vm 对象时候挂载 因为这个时候页面还没有创建

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')

3.最好在组件销毁前要销毁事件

  beforeDestroy () {
    // 在销毁之前要解绑监听事件
    this.$bus.$off('todoAll')
  },

4. 在获取数据渲染总数和完成事件的时候最好挂载到created上因为页面还有被渲染先订阅获取数据才能在刷新后数据已经回来了 (因为我的数据在localStorage中)

  created () {
    this.$bus.$on("todoAll", (data, compelteLength, allLength) => {
      this.handAll = data;
      this.complete = compelteLength;
      this.todoAll = allLength;
    });
  },

5. 监视数据的时候因为我们的数据都定义在对象中 watch要想触发必须深度监视 那种函数简写方式就不好用了必须深度监视

  watch: {
    todoList: {
      // 表示深度监视
      deep: true,
      // 然后是一个事件函数handler固定的
      handler(value) {
        localStorage.setItem('todos', JSON.stringify(value))
      },
    },
  },

 

6.在编辑文本框的时候 一定要等数据渲染完了才能给input 框获取焦点 当然下面那个函数也可以写成一个setTimout定时函数 就会放到执行站最后执行

    handleRedact(item) {
      if (Object.prototype.hasOwnProperty.call(item, 'redact')) {
        item.redact = true
      } else {
        this.$set(item, 'redact', true)
      }
// 就是这里必须等待input渲染完才能获取焦点 this.$nextTick(() => { this.$refs.blurChange[0].focus() }) },

 

标签:练手,vue,todoList,bus,总线,item,Vue,事件
From: https://www.cnblogs.com/qiaomucreate/p/16786249.html

相关文章

  • qiankun+vue,为什么我的子应用的子路由老是跳404?这么解决
    主要解决子应用内部跳转路由时,跳到404页的问题你能搜这个,我姑且认为你基本配置已经好了,而且主跳子的一级路由是正常的,请往下看忘说了,我的主应用和子应用都是Vue主应用......
  • VSCode开发Vue
    常用快捷键设置前进和后退(返回上一个浏览位置/下一个浏览位置)快捷键在Windows中可以使用快捷键“Alt+←”/“Alt+→”/实现。 插件最新最全VSCODE插件推荐(2022版)......
  • vue 给元素或子组件添加标识ref
    给元素或子组件注册引用信息(id的替代者)//添加ref<h1ref="title"></h1>//相当于<h1id="title"></h1>//获取refthis.$refs.title;//相当于document.getElementById("title")......
  • vue+java AES 加密 解密
    后端:导入aes依赖<!--aes加密工具--><dependency><groupId>commons-codec</groupId><artifactId>commons-codec</artifactId><version>1.15</versi......
  • Vue10货物增删改查
    序实现简单的增删改查案例实现效果源码<!DOCTYPEhtml><html> <head> <metacharset="utf-8"/> <title></title> <style> th{ background-color:......
  • vue11 组件初识
    序组件(component)是vue.js最强大的功能之一。组件的作用就是封装可重用的代码,通常一个组件就是一个功能体,便于在多个地方都能够调用这个功能体。每个组件都是Vue的实例对......
  • webpack5 + vue3 打包问题
    1,打包后本地访问空白或者404问题解决办法:  2, 打包CSS图片路径不正确问题在生产模式下,使用的MiniCssExtractPlugin.loader代替style-loader,但图片、字体等资源......
  • Vue项目添加水印
    1.utils文件夹下创建canvas画布水印文件utils/watermark.jsletwatermark={}letsetWatermark=(str)=>{letid='1.23452384164.123412416';if(docume......
  • 2022-10-12 vue+uniapp+echarts 使用记录
    第一步:安装echartsnpmiecharts第二步:在main.js引入echartsimportechartsfrom'echarts'Vue.prototype.$echarts=echarts第三步:在项目中使用<template>......
  • 2022-10-12 vue+uniapp+echarts 报错日志
    这里是vue+uniapp+echarts报错日志报错一:.initisundefined初始化图表失败,请检查你的echarts是否安装成功成功==》请检查你当前安装的版本是否过高,是==》降低版本(比......