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 相关文章推荐
Javascript实例教程(19) 使用HoTMetal(7)
Dec 23 Javascript
js时间戳格式化成日期格式的多种方法
Nov 11 Javascript
js中的如何定位固定层的位置
Jun 15 Javascript
jQuery模拟新浪微博首页滚动效果的方法
Mar 11 Javascript
JS实现窗口加载时模拟鼠标移动的方法
Jun 03 Javascript
jQuery.Uploadify插件实现带进度条的批量上传功能
Jun 08 Javascript
使用jQuery5分钟快速搞定双色表格的简单实例
Aug 08 Javascript
微信小程序 获取session_key和openid的实例
Aug 17 Javascript
Vue实现6位数密码效果
Aug 18 Javascript
深入解读Node.js中的koa源码
Jun 17 Javascript
js中的面向对象之对象常见创建方法详解
Dec 16 Javascript
解决vue elementUI中table里数字、字母、中文混合排序问题
Jan 07 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+.htaccess实现全站静态HTML文件GZIP压缩传输(一)
2007/02/15 PHP
使用bcompiler对PHP文件进行加密的代码
2010/08/29 PHP
php学习笔记之面向对象编程
2012/12/29 PHP
JavaScript 对任意元素,自定义右键菜单的实现方法
2013/05/08 Javascript
jQuery晃动层特效实现方法
2015/03/09 Javascript
跟我学习javascript的执行上下文
2015/11/18 Javascript
使用angularjs创建简单表格
2016/01/21 Javascript
JSON中key动态设置及JSON.parse和JSON.stringify()的区别
2016/12/29 Javascript
JavaScript &amp; jQuery完美判断图片是否加载完毕
2017/01/08 Javascript
nodeJs链接Mysql做增删改查的简单操作
2017/02/04 NodeJs
VueJS如何引入css或者less文件的一些坑
2017/04/25 Javascript
Ionic3实现图片瀑布流布局
2017/08/09 Javascript
Angular使用过滤器uppercase/lowercase实现字母大小写转换功能示例
2018/03/27 Javascript
在vue项目中,将juery设置为全局变量的方法
2018/09/25 Javascript
vue通信方式EventBus的实现代码详解
2019/06/10 Javascript
ES6 Array常用扩展的应用实例分析
2019/06/26 Javascript
详解Nuxt.js中使用Element-UI填坑
2019/09/06 Javascript
微信小程序实现时间进度条功能
2020/11/17 Javascript
[51:06]DOTA2-DPC中国联赛 正赛 Elephant vs Aster BO3 第二场 1月26日
2021/03/11 DOTA
详解Python验证码识别
2016/01/25 Python
Python读写/追加excel文件Demo分享
2018/05/03 Python
ubuntu17.4下为python和python3装上pip的方法
2018/06/12 Python
python添加菜单图文讲解
2019/06/04 Python
numpy.linalg.eig() 计算矩阵特征向量方式
2019/11/29 Python
python实现双色球随机选号
2020/01/01 Python
如何基于Python实现数字类型转换
2020/02/07 Python
python turtle工具绘制四叶草的实例分享
2020/02/14 Python
python实现密码强度校验
2020/03/18 Python
Python 操作SQLite数据库的示例
2020/10/16 Python
美国家庭鞋店:Shoe Sensation
2019/09/27 全球购物
标记环网Toke Ring IEEE802.5
2014/05/26 面试题
采购部主管岗位职责
2014/01/01 职场文书
党的群众路线教育实践活动心得体会900字
2014/03/07 职场文书
关于爱国的标语
2014/06/24 职场文书
2015年社区妇联工作总结
2015/04/21 职场文书
导游词之秦始皇兵马俑博物馆
2019/09/29 职场文书