博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Vue使用问题解决记录(持续更新)
阅读量:5765 次
发布时间:2019-06-18

本文共 3678 字,大约阅读时间需要 12 分钟。

hot3.png

1 this属性调用无效

this在methods中的方法表面调用,表明调用的是当前vue对象.

但在方法内部的方法中调用时,所指便不再是vue对象,可能式窗口本身.
此时建议,在methods中的方法开始时写:

var that=this;//或者var self=this;

此后内部调用that即可.

2 打印vue中的对象时,属性对应一堆方法,无法查看具体值

如某vue对象中的data有一个名为mainData的对象,利用对象克隆,即可查看到此时(!)该对象对应的值.

写法:

console.log(JSON.parse(JSON.stringify(mainData)));

3.设置数组中的某个索引值或对象中的某个属性值时,变化无效

该问题也是新手经常遇到的问题,具体原因不表,此处只说办法.

this.arrData[0]='123';this.mData.name='yys';//以上写法均不会生效,应改为以下的写法Vue.set(this.arrData,0,'123');Vue.set(this.mData,'name','yys');

4.watch对象,内部属性值改变后不触发watch方法

也是常见问题之一,如:

watch:{    mData:function(newVal,oldVal){        //当内部属性name变更时,默认情况不会触发该方法        console.log(newVal);    }}

改为以下写法即可:

watch:{    mData:{        handler:function(nv,ov){            //可触发            console.log(nv);        },        //核心所在        deep:true     }},

5.有时将对象集合的某属性值设为空值(空字符串),每个对象的表现都一样(显示相同的值)

该问题,推测是vue的确认机制造成的,建议对于明确有意义的值,不要设定为空字符串;

如我常将数字组成的默认值设为0或-1,而将字符串构成的默认值设为'--';

6.对于插件类组成的新样式,不知道怎么用vue

以select2为例,可以使用组件的方式实现(参考yys写的插件),具体就不展开了.

大体原则是,利用插件本身的api.

7.watch对象时,新旧值相同的问题

在问题4中,如果监听的是一个对象或数组,设置deep:true,每次值变更的时候会触发方法,但新值和旧值总是一样的.具体原因此处不再解释(简单的说,可根据指针理解),仅提出解决方案:

譬如说,监听的是vue中名为mainData的对象.

  • 此时需要创建一个记录mainData的旧值;
  • 在每次监听函数开始时,把oldMainData当做旧值;
  • 而在监听函数结束时,将mainData的值克隆给oldMainData即可.
var vueMain=new Vue({    el:'#main_zone',    data:{        mainData:{},        oldMainData:{}    },    watch:{        //此监听函数中,第二个参数(旧值)总和第一个参数相同,所以没有调用必要        mainData:function(nv){            var ov=this.oldMainData;            if(nv.count!==ov.count||nv.price!==ov.price){                if(!isNaN(nv.price)&&!isNaN(nv.count)){                    nv.money=nv.price*nv.count;                }else{                    nv.money='';                }            }            //最后一步,必须将nv的值克隆给oldMainData            this.oldMainData=JSON.parse(JSON.stringify(nv));        }    }});

8.有时选择完vue组成的select2,change时值已给定,但显示不改变的问题

给定一个具体的初始值,如常用的'--'或0.

9.监听vue组成的select2值改变

共计两种方法,目前来看第2种更好:

  1. 数据监听,具体参考7;
  2. 修改vue组成的select2插件,利用onChange属性(参考以下代码).
Vue.component('select2', {	props: ['options', 'value','other_config','onChange','location'],	template: '',	mounted: function() {		var vm = this;		var config2={data:this.options};		//允许其他配置,如宽度		config2=Object.assign(config2,this.other_config);		$(this.$el)			// init select2			.select2(config2)			.val(this.value)			.trigger('change')			// emit event on change.			.on('change', function() {                vm.$emit('input', this.value);				if(vm.onChange){                    //注:该方法会触发两次,且仅在第二次改变之后才会被触发(暂无更好方法)					if(this.oldVal!==this.value){                        this.oldVal2=this.oldVal;                        vm.onChange(this.value,this.oldVal2,vm.location);                    }                    this.oldVal=this.value;				}			});	},	watch: {		value: function(value) {            // update value            //此处额外添加的适应事件            var vm = this;            $(this.$el)				.val(value)				.trigger('change');                // .on('change', function() {                 //    vm.$emit('input', this.value)                    // if(typeof vm.onChange!=='undefined'){                    //     vm.onChange(this.value);                    // }                // });        },		options: function(options) {			// update options			var config2={data:options};            //允许其他配置            config2=Object.assign(config2,this.other_config);			$(this.$el).empty().select2(config2);		},		other_config:function(other_config){			var config2={data:this.options};            //允许其他配置            config2=Object.assign(config2,other_config);			$(this.$el).empty().select2(config2);		}	},	destroyed: function() {		$(this.$el).off().select2('destroy')	}})

转载于:https://my.oschina.net/yangyishe/blog/1858963

你可能感兴趣的文章
GitLab联合DigitalOcean为开源社区提供GitLab CI免费托管
查看>>
通过XAML Islands使Windows桌面应用程序现代化
查看>>
区块链现状:从谨慎和批判性思维看待它(第二部分)
查看>>
苹果公司透露Siri新发音引擎的内部原理
查看>>
GCM 3.0采用类似方式向Android、iOS和Chrome发送消息
查看>>
如何成为一家敏捷银行
查看>>
Oracle在JavaOne上宣布Java EE 8将会延期至2017年底
查看>>
Javascript 深入浅出原型
查看>>
简单之极,搭建属于自己的Data Mining环境(Spark版本)
查看>>
Ruby 2.5.0概览
查看>>
如何通过解决精益问题提高敏捷团队生产力
查看>>
Comment2Wechat —— Typecho 插件
查看>>
Apache下.htaccess文件配置及功能介绍
查看>>
Magento XML cheatsheet
查看>>
Egg 2.19.0 发布,阿里开源的企业级 Node.js 框架
查看>>
Kubernetes 弹性伸缩全场景解析 (四)- 让核心组件充满弹性 ...
查看>>
使用MySQLTuner-perl对MySQL进行优化
查看>>
Swoole 4.1.0 正式版发布,支持原生 Redis/PDO/MySQLi 协程化 ...
查看>>
开发网络视频直播系统需要注意的地方
查看>>
haproxy mysql实例配置
查看>>