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 相关文章推荐
jQuery '行 4954 错误: 不支持该属性或方法' 的问题解决方法
Jan 19 Javascript
用js实现输入提示(自动完成)的实例代码
Jun 14 Javascript
简体中文转换繁体中文(实现代码)
Dec 25 Javascript
javascript屏蔽右键代码
May 15 Javascript
jQuery窗口、文档、网页各种高度的精确理解
Jul 02 Javascript
jQuery简单tab切换效果实现方法
Apr 08 Javascript
浅谈JS正则表达式的RegExp对象和括号的使用
Jul 28 Javascript
vue组件详解之使用slot分发内容
Apr 09 Javascript
基于jQuery.i18n实现web前端的国际化
May 04 jQuery
详解React中传入组件的props改变时更新组件的几种实现方法
Sep 13 Javascript
js实现幻灯片轮播图
Aug 14 Javascript
vue中使用mockjs配置和使用方式
Apr 06 Vue.js
微信小程序(订阅消息)功能
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
丧钟首部独立剧集《丧钟:骑士与龙》北美正式开播,场面血腥
2020/04/09 欧美动漫
使用php实现截取指定长度
2013/08/06 PHP
PHP 函数call_user_func和call_user_func_array用法详解
2014/03/02 PHP
php使用smtp发送支持附件的邮件示例
2014/04/13 PHP
理清PHP在Linxu下执行时的文件权限方法
2017/06/07 PHP
js几个验证函数代码
2010/03/25 Javascript
Script标签与访问HTML页面详解
2014/01/10 Javascript
使用jquery局部刷新(jquery.load)从数据库取出数据
2014/01/22 Javascript
最流行的Node.js精简型和全栈型开发框架介绍
2015/02/26 Javascript
jQuery实现简单的列表式导航菜单效果代码
2015/08/31 Javascript
JS+CSS实现鼠标滑过时动态翻滚的导航条效果
2015/09/24 Javascript
js滚动条平滑移动示例代码
2016/03/29 Javascript
Vue.js中用v-bind绑定class的注意事项
2016/12/13 Javascript
JS字符串长度判断,超出进行自动截取的实例(支持中文)
2017/03/06 Javascript
如何使用vuejs实现更好的Form validation?
2017/04/07 Javascript
关于Vue实现组件信息的缓存问题
2017/08/23 Javascript
node实现分片下载的示例代码
2018/10/17 Javascript
详解vue中的父子传值双向绑定及数据更新问题
2019/06/13 Javascript
webpack DllPlugin xxx is not defined解决办法
2019/12/13 Javascript
原生JS实现贪吃蛇小游戏
2020/03/09 Javascript
vue-cli3使用mock数据的方法分析
2020/03/16 Javascript
[01:03:37]Secret vs VGJ.S Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
python绘制中国大陆人口热力图
2018/11/07 Python
Django2.1集成xadmin管理后台所遇到的错误集锦(填坑)
2018/12/20 Python
详解如何在cmd命令窗口中搭建简单的python开发环境
2019/08/29 Python
Python Tricks 使用 pywinrm 远程控制 Windows 主机的方法
2020/07/21 Python
HTML5 source标签:媒介元素定义媒介资源
2018/01/29 HTML / CSS
硕士研究生自我鉴定
2013/11/08 职场文书
光信息科学与技术专业职业生涯规划
2014/03/13 职场文书
流动人口婚育证明范本
2014/09/26 职场文书
物业项目经理岗位职责
2015/04/01 职场文书
党员进社区活动总结
2015/05/07 职场文书
2015年档案管理员工作总结
2015/05/13 职场文书
大学生实习证明
2015/06/16 职场文书
2015中学教学工作总结
2015/07/22 职场文书
2019年暑期法院实习报告
2019/12/18 职场文书