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 相关文章推荐
用js实现下载远程文件并保存在本地的脚本
May 06 Javascript
用JavaScript实现单继承和多继承的简单方法
Mar 29 Javascript
JQuery 将元素显示在屏幕的中央的代码
Feb 27 Javascript
JSON JQUERY模板实现说明
Jul 03 Javascript
浅谈轻量级js模板引擎simplite
Feb 13 Javascript
JS实现双击编辑可修改状态的方法
Aug 14 Javascript
JavaScript学习小结之使用canvas画“哆啦A梦”时钟
Jul 24 Javascript
webix+springmvc session超时跳转登录页面
Oct 30 Javascript
第一次接触神奇的前端框架vue.js
Dec 01 Javascript
BootStrap 表单控件之单选按钮水平排列
May 23 Javascript
Vue 子组件与数据传递问题及注意事项
Jul 11 Javascript
国内常用的js类库大全(CDN公共库)
Jun 24 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新手上路(七)
2006/10/09 PHP
php checkdate、getdate等日期时间函数操作详解
2010/03/11 PHP
PHP7基于curl实现的上传图片功能
2018/05/11 PHP
JS(jQuery)实现聊天接收到消息语言自动提醒功能详解【提示“您有新的消息请注意查收”】
2019/04/16 PHP
php使用自带dom扩展进行元素匹配的原理解析
2020/05/29 PHP
php解析非标准json、非规范json的方式实例
2020/12/10 PHP
window.opener用法和用途实例介绍
2013/08/19 Javascript
javascript快速排序算法详解
2014/09/17 Javascript
js获取form的方法
2015/05/06 Javascript
AngularJS模块学习之Anchor Scroll
2016/01/19 Javascript
使用jQuery监听DOM元素大小变化
2016/02/24 Javascript
全面了解addEventListener和on的区别
2016/07/14 Javascript
Bootstrap复选框和单选按钮美化插件(推荐)
2016/11/23 Javascript
canvas红包照片实例分享
2017/02/28 Javascript
ionic2懒加载配置详解
2017/09/01 Javascript
jQuery第一次运行页面默认触发点击事件的实例
2018/01/10 jQuery
layui添加动态菜单与选项卡 AJAX请求的例子
2019/09/25 Javascript
vue-cli3使用mock数据的方法分析
2020/03/16 Javascript
[00:14]护身甲盾
2019/03/06 DOTA
从零学python系列之数据处理编程实例(二)
2014/05/22 Python
Python爬虫包 BeautifulSoup  递归抓取实例详解
2017/01/28 Python
Python爬取数据保存为Json格式的代码示例
2019/04/09 Python
Python django框架开发发布会签到系统(web开发)
2020/02/12 Python
python GUI库图形界面开发之PyQt5结合Qt Designer创建信号与槽的详细方法与实例
2020/03/08 Python
英国折扣零售连锁店:QD Stores
2018/12/08 全球购物
拉夫劳伦爱尔兰官方网站:Ralph Lauren爱尔兰
2020/04/10 全球购物
拾金不昧表扬信范文
2014/01/11 职场文书
幼儿园教学随笔感言
2014/02/23 职场文书
家长建议怎么写
2014/05/15 职场文书
2015年预防青少年违法犯罪工作总结
2015/05/22 职场文书
解约证明模板
2015/06/19 职场文书
欧也妮葛朗台读书笔记
2015/06/30 职场文书
家庭教育培训学习心得体会
2016/01/14 职场文书
2016年第104个国际护士节活动总结
2016/04/06 职场文书
MySQL表的增删改查基础教程
2021/04/07 MySQL
html解决浏览器记住密码输入框的问题
2023/05/07 HTML / CSS