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 03 Javascript
node.js中的fs.lchmod方法使用说明
Dec 16 Javascript
基于javascript实现样式清新图片轮播特效
Mar 30 Javascript
基于JavaScript实现单选框下拉菜单添加文件效果
Jun 26 Javascript
文本框只能输入数字的js代码(含小数点)
Jul 10 Javascript
解决vue-cli webpack打包后加载资源的路径问题
Sep 25 Javascript
解决webpack+Vue引入iView找不到字体文件的问题
Sep 28 Javascript
Vue动态组件与异步组件实例详解
Feb 23 Javascript
使用webpack构建应用的方法步骤
Mar 04 Javascript
angular 实现下拉列表组件的示例代码
Mar 09 Javascript
javascript中this的用法实践分析
Jul 29 Javascript
vue项目配置同一局域网可使用ip访问的操作
Oct 23 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传输数据的代码
2007/11/13 PHP
微信 开发生成带参数的二维码的实例
2016/11/23 PHP
PHP大文件分片上传的实现方法
2018/10/28 PHP
jQuery 下拉列表 二级联动插件分享
2012/03/29 Javascript
JavaScript极简入门教程(三):数组
2014/10/25 Javascript
浅析javascript异步执行函数导致的变量变化问题解决思路
2016/05/13 Javascript
使用JS中的exec()方法构造正则表达式验证
2016/08/01 Javascript
JS实现倒计时(天数、时、分、秒)
2016/11/16 Javascript
JavaScript 详解预编译原理
2017/01/22 Javascript
js实现年月日表单三级联动
2020/04/17 Javascript
Ext JS 实现建议词模糊动态搜索功能
2017/05/13 Javascript
基于JavaScript实现瀑布流布局
2018/08/15 Javascript
Javascript实现简易天数计算器
2020/05/18 Javascript
基于vue实现简易打地鼠游戏
2020/08/21 Javascript
微信小程序组件生命周期的踩坑记录
2021/03/03 Javascript
Python中http请求方法库汇总
2016/01/06 Python
python中pandas.DataFrame排除特定行方法示例
2017/03/12 Python
批量获取及验证HTTP代理的Python脚本
2017/04/23 Python
终端命令查看TensorFlow版本号及路径的方法
2018/06/13 Python
Python类的继承、多态及获取对象信息操作详解
2019/02/28 Python
python flask几分钟实现web服务的例子
2019/07/26 Python
pytorch之ImageFolder使用详解
2020/01/06 Python
Python实现动态给类和对象添加属性和方法操作示例
2020/02/29 Python
Python如何合并多个字典或映射
2020/07/24 Python
解决Pyinstaller打包软件失败的一个坑
2021/03/04 Python
html5弹跳球示例代码
2013/07/23 HTML / CSS
viagogo英国票务平台:演唱会、体育比赛、戏剧门票
2017/03/24 全球购物
简历中个人求职的自我评价模板
2013/11/29 职场文书
纪念建党演讲稿范文
2014/01/13 职场文书
司机辞职报告范文
2014/01/20 职场文书
股份转让协议书
2014/04/12 职场文书
学校班班通实施方案
2014/06/11 职场文书
高校群众路线教育实践活动剖析材料
2014/10/10 职场文书
反邪教警示教育活动总结
2015/05/09 职场文书
Python Pygame实战在打砖块游戏的实现
2022/03/17 Python
10大幻兽系恶魔果实 蝙蝠果实上榜,第一自愈能力强
2022/03/18 日漫