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获得地址栏参数的两种方法
Nov 08 Javascript
基于jquery的direction图片渐变动画效果
May 24 Javascript
Jquery 过滤器(first,last,not,even,odd)的使用
Jan 22 Javascript
用jquery写的菜单从左往右滑动出现
Apr 11 Javascript
js数组与字符串常用方法总结
Jan 13 Javascript
angularjs的select使用及默认选中设置
Apr 08 Javascript
angularjs定时任务的设置与清除示例
Jun 02 Javascript
vue scroller返回页面记住滚动位置的实例代码
Jan 29 Javascript
vue头部导航动态点击处理方法
Nov 02 Javascript
JavaScript实现的鼠标跟随特效示例【2则实例】
Dec 22 Javascript
JS实现查找数组中对象的属性值是否存在示例
May 24 Javascript
JavaScript 实现继承的几种方式
Feb 19 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 flush无效,IIS7下php实时输出的方法
2016/08/25 PHP
解决在laravel中leftjoin带条件查询没有返回右表为NULL的问题
2019/10/15 PHP
js单例模式的两种方案
2013/10/22 Javascript
jquery判断复选框选中状态以及区分attr和prop
2015/12/18 Javascript
AngularJS基础 ng-options 指令详解
2016/08/02 Javascript
基于MVC+EasyUI的web开发框架之使用云打印控件C-Lodop打印页面或套打报关运单信息
2016/08/29 Javascript
详解用原生JavaScript实现jQuery的某些简单功能
2016/12/19 Javascript
vue-resource 拦截器使用详解
2017/02/21 Javascript
把JavaScript代码改成ES6语法不完全指南(分享)
2017/09/10 Javascript
元素全屏的设置与监听实例
2017/11/28 Javascript
通过js动态创建标签,并设置属性方法
2018/02/24 Javascript
vue文件运行的方法教学
2019/02/12 Javascript
vxe-table vue table 表格组件功能
2019/05/26 Javascript
JavaScript键盘事件响应顺序详解
2019/09/30 Javascript
Vue 中使用lodash对事件进行防抖和节流操作
2020/07/26 Javascript
原生js中运算符及流程控制示例详解
2021/01/05 Javascript
CentOS7.3编译安装Python3.6.2的方法
2018/01/22 Python
Pandas:Series和DataFrame删除指定轴上数据的方法
2018/11/10 Python
Python内存管理实例分析
2019/07/10 Python
几款好用的python工具库(小结)
2020/10/20 Python
python-jwt用户认证食用教学的实现方法
2021/01/19 Python
利用css3画个同心圆示例代码
2017/07/03 HTML / CSS
多视角3D可旋转的HTML5 Logo动画
2016/03/02 HTML / CSS
法拉利英国精品店:Ferraris Boutique UK
2019/07/20 全球购物
学校食堂采购员岗位职责
2013/12/05 职场文书
工程专业毕业生自荐信范文
2013/12/25 职场文书
租房协议书
2014/04/10 职场文书
《少年王冕》教学反思
2014/04/11 职场文书
环保倡议书
2014/04/14 职场文书
大学生活动总结模板
2014/07/02 职场文书
群众路线教育党员自我剖析材料
2014/10/06 职场文书
2014酒店客房部工作总结
2014/12/16 职场文书
一般纳税人申请报告
2015/05/18 职场文书
2016年度员工工作表现评语
2015/12/02 职场文书
新课程改革心得体会
2016/01/22 职场文书
Python带你从浅入深探究Tuple(基础篇)
2021/05/15 Python