楼主最近在项目中实践了一下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开发的习惯,效果如图:

image.png

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

        <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>

image.png

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

我的解决办法是,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;}

效果如下:

image.png

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

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

vue下的@change事件相关推荐

  1. vue 事件调用 传参_对vue下点击事件传参和不传参的区别详解

    如下所示: {{btn_text1}} {{btn_text2}} var _vm = new Vue({ data : { btn_text1 : '点击1' , btn_text2 : '点击2' ...

  2. click传值vue_对vue下点击事件传参和不传参的区别详解

    如下所示: {{btn_text1}} {{btn_text2}} var _vm = new Vue({ data : { btn_text1 : '点击1' , btn_text2 : '点击2' ...

  3. Vue下 touchstart touchend 事件无效失效解决办法

    Vue下 touchstart touchend 事件无效失效解决办法 <van-button:disabled="isLoading"plaintype="inf ...

  4. Vue的自定义@change事件(自己学习用途,不建议参考)

    html dom事件 虽然我会用Vue会写一些组件和组件但是,有一些细节需要自己去扣,比如说我写项目的时候,遇到问题,那个change事件我就不是很清楚.我就去百度后面才发现,change事件是组件里 ...

  5. vue下拉框值改变事件_vue下的@change事件

    楼主最近在项目中实践了一下vue,期间遇到了一些坑,现在记录一下 先上代码 Title 请选择 {{province.text}} 请选择 {{city.text}} new Vue({ el:'#a ...

  6. vue下拉框值改变事件_vue和element ui 下拉框select的change事件

    1 在线编辑测试工具 编辑好代码后点击 run 即可 2 vue原生写法 2.1 html部分 新增 空 {{ drug.name }} 刪除 尚未新增任何資料 總金額:{{ totalMoney } ...

  7. vue下拉框值改变事件_下拉框的change事件

    $(document).ready(function() { //绑定下拉框change事件,当下来框改变时调用 SelectChange()方法 $("#selectID").c ...

  8. vue、Dropdown 下拉菜单、Dropdown属性事件、vue Dropdown 全部下拉菜单、vue Dropdown 全部属性事件

    vue.Dropdown 下拉菜单.Dropdown属性事件.vue Dropdown 全部下拉菜单.vue Dropdown 全部属性事件 设计规则 何时使用 代码演示 1.基本 2.右键菜单 3. ...

  9. vue:添加enter事件,键盘敲下enter事件

    vue项目中遇到点击查询按钮可以查出数据,点击回车键也能查出数据,所以就想点击回车键时调用查询方法. 示例代码如下: 一.第一步: 给input按钮绑定@keyup.enter:如果是要对页面的but ...

最新文章

  1. Spring Boot @ConfigurationProperties使用指导
  2. 三容水箱液位控制系统_三容水箱液位控制系统的建模及仿真.doc
  3. skimage 学习笔记
  4. .NET 分布式自增Id组件(解决自动分配机器Id、时间回拨问题)
  5. window下配置SSH连接GitHub、GitHub配置ssh key
  6. linux系统调用记录模块实验报告,华科操作系统实验报告(DOC)
  7. 第0章 Oracle的安装及相关配置
  8. Mac下关于ssh命令的简化
  9. 【网络编程】同步、异步、阻塞和非阻塞
  10. 714 买卖股票的最佳时机含手续费(状态机dp)
  11. IOS UIKit基础控件的使用
  12. idea报错 No valid Maven installation found.maven不能用
  13. 姿态估计1-10:FSA-Net(头部姿态估算)-源码无死角讲解(5)-Feature aggregation
  14. 三步必杀(高阶差分系列)
  15. labview精华资料集合光盘
  16. java中输出日历_Java打印日历表
  17. Kalibr安装教程
  18. ICPC Latin American Regional – 2017 B题(模拟+思维)
  19. python finance函数_Finance-Python · PyPI
  20. i3 12100f和i5 10400f哪个好

热门文章

  1. 最新Elasticsearch8.4.3 + Kibana8.4.3在云服务器Centos7.9安装部署(参考官方文档)
  2. [洛谷]P1413 坚果保龄球 (#贪心 -1.18)
  3. H.S.Teoh为D的垃集辩护.与Ola的反驳.
  4. unity3d培训_005
  5. 圖譜謎宮(2019年6月28日於鄂爾多斯)
  6. 12位早起的IT大佬们让小伙伴们都惊呆了
  7. android用服务建立悬浮窗,Android悬浮窗用法总结
  8. SOLIDWORKS中如何使用配置创建系列零件
  9. 后台架构设计—数据存储层
  10. java开发的颠覆者epub,创业颠覆者-陈景畑 翟顺[6寸pdf mobi epub kindle版].pdf