vue学习

2018-02-07  本文已影响2人  8becbd689309
var ex={};
Object.defineProperties(ex,{
      name:{value:"wang"},
      mes:{get: function(){return this.name+"qqq"}}
    })
console.log(ex.mes);//wangqqq
console.log(ex.mes());
var ex1={
    name:"wang",
    get mes(){return this.name+"qqq"}
}
console.log(ex1.mes);//wangqqq
console.log(ex1.mes());//无论是object方法还是字面量来定义,以方法调用都报错了,原因是不是一个函数。
证明在js是不可以的,方法就是方法,属性就是属性,vue应该进行过封装,可能是因为调用方法的时候调用的是里一个对象的方法,当作属性的时候是vm的属性,只是这两个对象因为某种原因绑定在了一起,就如同data一样。
注意

其实使用methods方法也可以达到和计算属性相同的效果,方法可以实时响应data中数据的改变,一旦data数据变化,而方法中有跟这个数据变化相关的值,整个methods都会调用以便响应这个变化,这就会导致浪费性能,因为有时并不是所有的数据都发生了变化,仅仅变化了一个数据而已。
计算属性就相当于get set。
上面的问题得到了解决,计算属性并不能使用()的方式,使用()是methods调用的,只是他们两者的代码并没有变,两者区别在于缓存,计算属性是基于依赖进行缓存,只有在相关依赖发生改变才会求值,也就是说只有依赖值没有发生改变,访问计算属性返回的是之前的结果,不会再执行函数,也就是说如果不是响应式依赖那么计算属性的值就不会再更新,相比之下,每当出发重新渲染,调用方法总会再次执行函数,并且methods中的方法都会被调用,也就是时候没有缓存。

.enter
.tab
.delete(捕获“删除”和退格键)
.esc
.space
.up
.down
.left
.right
另外可以使用全局config.keyCodes对象自定义按键修饰符别名:
Vue.config.keyCodes.f1=112//可以使用v-on:keyup.f1
新增:暴露的有效案件名转换为kebab-case作为修饰符。

如下修饰符实现按下相应按键才触发鼠标或键盘事件的监听器
.ctrl .alt .shift .meta

<input @keyup.alt.67="clear"> alt+c
<div @click.ctrl="doSomething">do something</div>  ctrl+click

.exact 允许控制由精确的系统修饰符组合触发的事件

<button @click.ctrl="onClick">A</button>按下ctrl,即使alt,shift被一同按下也会触发事件
<button @click.ctrl.exact="onCtrlOnclick">A</button>,当且仅当ctrl按下时才会触发
<button @click.exact="onClick">A</button>没有任何系统修饰符按下时才会生效
另外新增鼠标按钮修饰符
.left .right .middle

组件

上一篇 下一篇

猜你喜欢

热点阅读