vue下的@change事件的实现


Posted in Javascript onOctober 25, 2019

楼主最近在项目中实践了一下vue,期间遇到了一些坑,现在记录一下

先上代码

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<script src="vue.js"></script>
<body>
  <div id="app">
    <select name="" id="" @change="getCity(provinceId)" v-model="provinceId">
      <option value="">请选择</option>
      <option v-for="province in provinces" :value="province.id">{{province.text}}</option>
    </select>
    <select name="" id="">
      <option value="">请选择</option>
      <option :value="city.id" v-for="city in citys">{{city.text}}</option>
    </select>
  </div>
</body>
<script>
  new Vue({
    el:'#app',
    data:{
      provinces:[],
      provinceId:'',
      citys:[],
      areas:[]
    },
    created:function() {
      this.areas = [  
        {text:'广东省',id:1,pid:0}, 
        {text:'上海市',id:2,pid:0},
        {text:'广州市',id:11,pid:1},
        {text:'中山市',id:12,pid:1}
      ];

      var provinces=this.areas.filter(function (area) {
        return area.pid == 0;
      });
      this.provinces = provinces;

    },
    methods:{
      getCity:function (id) {
        var citys=this.areas.filter(function (city) {
          return city.pid == id;
        })
        this.citys = citys;
      }
    }
  })
</script>
</html>

如果按照平常的使用习惯,看起来好像没多大问题,切换父元素的时候监听change事件联动子元素值的变化,很符合常年使用jQuery开发的习惯,效果如图:

vue下的@change事件的实现

那如果页面上有多个使用到相同的联动效果的地方呢?我们看下效果会是怎样,如图

<select name="" id="" @change="getCity(provinceId)" v-model="provinceId">
      <option value="">请选择</option>
      <option v-for="province in provinces" :value="province.id">{{province.text}}</option>
    </select>
    <select name="" id="">
      <option value="">请选择</option>
      <option :value="city.id" v-for="city in citys">{{city.text}}</option>
    </select>
    <select name="" id="" @change="getCity(provinceId)" v-model="provinceId">
      <option value="">请选择</option>
      <option v-for="province in provinces" :value="province.id">{{province.text}}</option>
    </select>
    <select name="" id="">
      <option value="">请选择</option>
      <option :value="city.id" v-for="city in citys">{{city.text}}</option>
    </select>

vue下的@change事件的实现

结果是互相受到影响,这并不是我们想看到的。

我的解决办法是,citys改为一个实时计算得到的数组而不是绑定现有仅有的同一个数组,代码改写如下:

<select name="" id="">
      <option value="">请选择</option>
      <option :value="city.id" v-for="city in getCity(provinceId)">{{city.text}}</option>
    </select>

      getCity:function (id) {
        var citys=this.areas.filter(function (city) {
          return city.pid == id;
        })
        return citys;
      }

效果如下:

vue下的@change事件的实现

可以看到,现在已经不会互相影响了。

总结:类似vue的mvvm框架都是数据与视图双向绑定的,而change事件往往用于视图改变的时候去操作数据,这在mvvm框架里面显得多此一举,框架本身已映射视图的变化到数据上,所以绝大部分的change事件监听都是不必要的,对应vue,可改写为methods方法或者computed计算属性。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Javascript 两个窗体之间传值实现代码
Sep 25 Javascript
js中substr,substring,indexOf,lastIndexOf的用法小结
Dec 27 Javascript
JavaScript中的6种运算符总结
Oct 16 Javascript
javascript实现粘贴qq截图功能(clipboardData)
May 29 Javascript
Angular2从搭建环境到开发步骤详解
Oct 17 Javascript
js如何判断是否在iframe中及防止网页被别站用iframe嵌套
Jan 11 Javascript
详解使用JS如何制作简单的ASCII图与单极图
Mar 31 Javascript
详解jquery选择器的原理
Aug 01 jQuery
javascript随机变色实例代码
Oct 15 Javascript
JavaScript canvas实现雪花随机动态飘落
Feb 08 Javascript
Vue实现跑马灯效果
May 25 Javascript
antd Select下拉菜单动态添加option里的内容操作
Nov 02 Javascript
微信小程序(订阅消息)功能
Oct 25 #Javascript
layui 解决form表单点击无反应的问题
Oct 25 #Javascript
解决Vue项目打包后打开index.html页面显示空白以及图片路径错误的问题
Oct 25 #Javascript
Vue el-autocomplete远程搜索下拉框并实现自动填充功能(推荐)
Oct 25 #Javascript
基于Vue el-autocomplete 实现类似百度搜索框功能
Oct 25 #Javascript
vue实现评论列表功能
Oct 25 #Javascript
vue中使用element ui的弹窗与echarts之间的问题详解
Oct 25 #Javascript
You might like
PHP防范SQL注入的具体方法详解(测试通过)
2014/05/09 PHP
PHP提交表单失败后如何保留已经填写的信息
2014/06/20 PHP
php mongodb操作类 带几个简单的例子
2016/08/25 PHP
php设计模式之备忘模式分析【星际争霸游戏案例】
2020/03/24 PHP
关于跨站脚本攻击问题
2011/12/22 Javascript
深入理解JavaScript系列(1) 编写高质量JavaScript代码的基本要点
2012/01/15 Javascript
javascript浏览器窗口之间传递数据的方法
2015/01/20 Javascript
编写高性能Javascript代码的N条建议
2015/10/12 Javascript
javascript中利用柯里化函数实现bind方法【推荐】
2016/04/29 Javascript
JavaScript判断用户名和密码不能为空的实现代码
2016/05/16 Javascript
JS限定手机版中图片大小随分辨率自动调整的方法
2016/12/05 Javascript
js实现仿购物车加减效果
2017/03/01 Javascript
JS实现多级菜单中当前菜单不随页面跳转样式而发生变化
2017/05/30 Javascript
原生JS实现瀑布流插件
2018/02/06 Javascript
vue2.0 可折叠列表 v-for循环展示的实例
2018/09/07 Javascript
解决百度Echarts图表坐标轴越界的方法
2018/10/17 Javascript
详解jQuery如何实现模糊搜索
2019/05/10 jQuery
vue2.x 对象劫持的原理实现
2020/04/19 Javascript
python3爬取各类天气信息
2018/02/24 Python
python中使用 xlwt 操作excel的常见方法与问题
2019/01/13 Python
关于不懂Chromedriver如何配置环境变量问题解决方法
2019/06/12 Python
set在python里的含义和用法
2019/06/24 Python
django的csrf实现过程详解
2019/07/26 Python
Python3进制之间的转换代码实例
2019/08/24 Python
Pandas数据离散化原理及实例解析
2019/11/16 Python
Python编程快速上手——Excel到CSV的转换程序案例分析
2020/02/28 Python
Python 如何展开嵌套的序列
2020/08/01 Python
HTML5的结构和语义(3):语义性的块级元素
2008/10/17 HTML / CSS
世界上最大的各式箱包网络零售店:eBag
2016/07/21 全球购物
高级电工工作职责
2013/11/21 职场文书
七一表彰活动方案
2014/01/18 职场文书
抵押贷款承诺书
2014/05/30 职场文书
运输企业安全生产责任书
2014/07/28 职场文书
校园学雷锋广播稿
2014/10/08 职场文书
研究生毕业论文导师评语
2014/12/31 职场文书
给女朋友的道歉短信
2015/05/12 职场文书