Vue 监听元素前后变化值实例


Posted in Javascript onJuly 29, 2020

我就废话不多说了,大家还是直接看代码吧~

export default {
 data() {
 return {
  item: ''
 }
 },
 watch: {
 item(now, before){
  let remove = before.filter(x => now.indexOf(x) == -1);
  let add = now.filter(x => before.indexOf(x) == -1);
  /* 显示字符串或数组元素的增加和减少 */
  console.log(add, remove);
 }
 }
}

补充知识:Vuejs+Element监听-window.resize-el-menu响应式显示

效果

Vue 监听元素前后变化值实例

代码

template

<template>
 <div class="sidebar">
 <!-- 折叠按钮 -->
 <div class="collapse-btn" @click="collapseChage">
 <i class="el-icon-d-arrow-left" v-show="!collapse" title="收起">
   
 <small>收缩侧边栏</small>
 </i>
 <i class="el-icon-d-arrow-right" v-show="collapse" title="展开"></i>
 </div>
 <el-menu
 class="sidebar-el-menu"
 :default-active="onRoutes"
 :collapse="collapse"
 text-color="#8d9199"
 active-text-color="#20a0ff"
 unique-opened
 router
 >
 <template v-for="item in items">
 <template v-if="item.subs">
  <el-submenu :index="item.index" :key="item.index">
  <template slot="title">
  <i :class="item.icon"></i>
  <span slot="title">{{ item.title }}</span>
  </template>
  <template v-for="subItem in item.subs">
  <el-submenu v-if="subItem.subs" :index="subItem.index" :key="subItem.index">
  <template slot="title">
   <i :class="subItem.icon"></i>
   {{ subItem.title }}
  </template>
  <el-menu-item
   v-for="(threeItem,i) in subItem.subs"
   :key="i"
   :index="threeItem.index"
  >{{ threeItem.title }}</el-menu-item>
  </el-submenu>
  <el-menu-item v-else :index="subItem.index" :key="subItem.index">
  <i :class="subItem.icon"></i>
  {{ subItem.title }}
  </el-menu-item>
  </template>
  </el-submenu>
 </template>
 <template v-else>
  <el-menu-item :index="item.index" :key="item.index">
  <i :class="item.icon"></i>
  <span slot="title">{{ item.title }}</span>
  </el-menu-item>
 </template>
 </template>
 </el-menu>
 <div>
 <i class="el-icon-d-arrow-right" v-show="collapse" title="展开"></i>
 </div>
 </div>
</template>

javascript

<script>
import bus from "./bus";
import { menu } from "../../data/menu";

export default {
 data() {
 return {
 collapse: false,
 items: menu,
 screenWidth: 1000
 };
 },
 computed: {
 onRoutes() {
 return this.$route.path.replace("/", "");
 }
 },
 created() {
 // 通过 Event Bus 进行组件间通信,来折叠侧边栏
 bus.$on("collapse", msg => {
 this.collapse = msg;
 });
 },
 mounted() {
 // if (document.body.clientWidth < 1500) {
 // this.collapseChage();
 // }
 const that = this;
 window.addEventListener("resize", function() {
 return (() => {
 window.screenWidth = document.body.clientWidth;
 that.screenWidth = window.screenWidth;
 })();
 });
 },
 watch: {
 screenWidth(val) {
 if (!this.timer) {
 this.screenWidth = val;
 this.timer = true;
 let that = this;
 setTimeout(function() {
  // that.screenWidth = that.$store.state.canvasWidth
  console.log(that.screenWidth);
  that.auto();
  that.timer = false;
 }, 400);
 }
 }
 },
 methods: {
 // 侧边栏折叠
 collapseChage() {
 this.collapse = !this.collapse;
 bus.$emit("collapse", this.collapse);
 },
 auto() {
 if (this.screenWidth < 1200) {
 console.log("收起来");
 this.collapse = true;
 bus.$emit("collapse", true);
 } else {
 console.log("展开");
 this.collapse = false;
 bus.$emit("collapse", false);
 }
 }
 }
};
</script>

css

<style scoped>
.sidebar {
 z-index: 1024;
 display: block;
 position: fixed;
 left: 0;
 top: 70px;
 bottom: 0;
 overflow-y: scroll;
}
.sidebar::-webkit-scrollbar {
 width: 0;
}
.sidebar-el-menu:not(.el-menu--collapse) {
 width: 200px;
}
.sidebar > ul {
 height: 100%; /*写给不支持calc()的浏览器*/
 height: calc(100% - 52px);
 top: 30px;
 background-color: rgb(235, 239, 243);
 border-top: 1px solid #d6d6d6;
}
.sidebar > ul > li,
.sidebar > ul > li div {
 background-color: rgb(235, 239, 243);
}
.sidebar > ul > li > ul {
 background-color: rgb(235, 239, 243);
}
.el-menu {
 background-color: rgb(235, 239, 243);
}
i {
 margin-right: 10px;
}
.collapse-btn {
 height: 30px;
 width: 100%;
 cursor: pointer;
 line-height: 30px;
 position: absolute;
 top: 0;
 left: 0;
 background-color: #f4f6fa;
 color: #fff;
 text-align: center;
 overflow: hidden;
 box-sizing: border-box;
 box-shadow: 0 5px 10px #ddd;
}
.collapse-btn i {
 color: #8d9199;
 padding: 1px;
 cursor: pointer;
 overflow: hidden;
 text-overflow: ellipsis;
}
/* .collapse-btn:before{
 content: "";
 display: block;
 height: 0;
 border-top: 1px dotted #909399;
 position: absolute;
 left: 15px;
 right: 15px;
 top: 18px;
 } */
</style>

##注意⚠️

此开发框架是github 名为 lin-xin 的 vue-manage-system

因公司项目需要兼容iPad,故而修改

详细代码点击这里

以上这篇Vue 监听元素前后变化值实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquery.AutoComplete.js中文修正版(支持firefox)
Apr 09 Javascript
关于img的href和src取变量及赋值的方法
Apr 28 Javascript
深入浅析knockout源码分析之订阅
Jul 12 Javascript
Vue.js 2.0和Cordova开发webApp环境搭建方法
Feb 26 Javascript
vue 做移动端微信公众号采坑经验记录
Apr 26 Javascript
node中modules.exports与exports导出的区别
Jun 08 Javascript
bootstrap select2插件用ajax来获取和显示数据的实例
Aug 09 Javascript
JS实现的获取银行卡号归属地及银行卡类型操作示例
Jan 08 Javascript
使用vue2.6实现抖音【时间轮盘】屏保效果附源码
Apr 24 Javascript
微信小程序使用websocket通讯的demo,含前后端代码,亲测可用
May 22 Javascript
详解为什么Vue中不要用index作为key(diff算法)
Apr 04 Javascript
原生js实现滑块区间组件
Jan 20 Javascript
使用eslint和githooks统一前端风格的技巧
Jul 29 #Javascript
vue-cli或vue项目利用HBuilder打包成移动端app操作
Jul 29 #Javascript
小程序实现列表展开收起效果
Jul 29 #Javascript
jquery实现简单自动轮播图效果
Jul 29 #jQuery
解决vue-photo-preview 异步图片放大失效的问题
Jul 29 #Javascript
vue 组件间的通信之子组件向父组件传值的方式
Jul 29 #Javascript
vue-preview动态获取图片宽高并增加旋转功能的实现
Jul 29 #Javascript
You might like
PHP和C#可共用的可逆加密算法详解
2015/10/26 PHP
使用jscript实现二进制读写脚本代码
2008/06/09 Javascript
网页中的图片的处理方法与代码
2009/11/26 Javascript
原生js事件的添加和删除的封装
2014/07/01 Javascript
nodejs事件的监听与触发的理解分析
2015/02/12 NodeJs
JavaScript为事件句柄绑定监听函数实例详解
2015/12/15 Javascript
jquery单击事件和双击事件冲突解决方案
2016/03/02 Javascript
在IE8上JS实现combobox支持拼音检索功能
2016/05/23 Javascript
微信小程序开发中的疑问解答汇总
2017/07/03 Javascript
JS和JQuery实现雪花飘落效果
2017/11/30 jQuery
JS 数组随机洗牌的实例代码
2018/09/12 Javascript
如何安装控制器JavaScript生成插件详解
2018/10/21 Javascript
详解Vue项目部署遇到的问题及解决方案
2019/01/11 Javascript
JavaScript设计模式之装饰者模式实例详解
2019/01/17 Javascript
js 将线性数据转为树形的示例代码
2019/05/28 Javascript
基于js实现抽红包并分配代码实例
2019/09/19 Javascript
JavaScript实现电灯开关小案例
2020/03/30 Javascript
Python Web服务器Tornado使用小结
2014/05/06 Python
浅析Python3爬虫登录模拟
2018/02/07 Python
使用pandas将numpy中的数组数据保存到csv文件的方法
2018/06/14 Python
Python实现DDos攻击实例详解
2019/02/02 Python
在Tensorflow中实现梯度下降法更新参数值
2020/01/23 Python
解决springboot yml配置 logging.level 报错问题
2020/02/21 Python
Python基于百度AI实现OCR文字识别
2020/04/02 Python
Html5 postMessage实现跨域消息传递
2016/03/11 HTML / CSS
HTML5 Canvas 起步(2) - 路径
2009/05/12 HTML / CSS
prAna官网:瑜伽、旅行和冒险服装
2019/03/10 全球购物
delegate与普通函数的区别
2014/01/22 面试题
采购文员岗位职责
2013/11/20 职场文书
法制宣传日活动总结
2014/04/29 职场文书
五好关工委申报材料
2014/05/31 职场文书
民事诉讼授权委托书范文
2014/08/02 职场文书
创新社会管理心得体会
2014/09/12 职场文书
大学文艺委员竞选稿
2015/11/19 职场文书
2019入党申请书格式和范文
2019/06/25 职场文书
maven 解包依赖项中的文件的解决方法
2022/07/15 Java/Android