v-bind:class="{'orange': isRipe, 'green': isNotRipe}"
v-bind:class="[class1, class2]"
v-bind:style="{color: color, fontSize: fontSize+'px' }"
计算属性是自动监听依赖值的变化,从而动态返回内容,监听是一个过程,在监听的值变化时,能够触发一个回调,并作一些事情。
因此区别来源于用法,只是须要动态值,那就用计算属性;须要知道值的改变后执行业务逻辑,才用 watch,用反或混用虽然可行,但都是不正确的用法。
说出一下区别会加分
computed 是一个对象时,它有哪些选项?
computed 和 methods 有什么区别?
computed 是否能依赖其它组件的数据?
watch 是一个对象时,它有哪些选项?javascript
总结css
当有一些数据须要随着另一些数据变化时,建议使用computed。
当有一个通用的响应数据变化的时候,要执行一些业务逻辑或异步操做的时候建议使用watcherhtml
stop prevent self前端
click.ctrl.exact 只有ctrl被按下的时候才触发vue
为何组件中的 data 必须是一个函数,而后 return 一个对象,而 new Vue 实例里,data 能够直接是一个对象?
由于组件是用来复用的,JS 里对象是引用关系,这样做用域没有隔离,而 new Vue 的实例,是不会被复用的,所以不存在引用对象的问题。java
https://cn.vuejs.org/v2/guide...react
https://www.cnblogs.com/attac...
根据官方文档介绍,v-model本质上就是语法糖,即利用v-model绑定数据后,其实就是既绑定了数据,又添加了一个input事件监听,以下:面试
这个概念出如今组件通讯。父组件是经过 prop 把数据传递到子组件的,可是这个 prop 只能由父组件修改,子组件不能修改,不然会报错。子组件想修改时,只能经过 $emit 派发一个自定义事件,父组件接收到后,由父组件修改。
通常来讲,对于子组件想要更改父组件状态的场景,能够有两种方案:
在子组件的 data 中拷贝一份 prop,data 是能够修改的,但 prop 不能:vue-router
export default { props: { value: String }, data () { return { currentValue: this.value } } }
若是是对 prop 值的转换,可使用计算属性:vuex
export default { props: ['size'], computed: { normalizedSize: function () { return this.size.trim().toLowerCase(); } } }
在beforeCreate 阶段,vue实例的挂载元素el和数据对象data都为undefined,还未初始化。在created阶段,vue实例的数据对象有了,el尚未。
在beforeMount阶段,vue实例的$el和data都初始化了,但仍是挂载以前未虚拟的DOM节点,data还没有替换。
在mounted阶段,vue实例挂载完成,data成功渲染。
当data变化时,会触发beforeUpdate和updated方法。这两个不经常使用,不推荐使用。
beforeDestory是在vue实例销毁前触发,通常在这里要经过removeEventListener解除手动绑定的事件。实例销毁后,触发的destroyed。
通常有两种
<router-link to='home'> router-link
标签会渲染为<a>
标签,咋填template中的跳转都是这种;router.push('/home')
这个问题几乎是面试必问的,回答也是有深有浅。基本上要知道核心的 API 是经过 Object.defineProperty()
来劫持各个属性的 setter / getter
,在数据变更时发布消息给订阅者,触发相应的监听回调,这也是为何 Vue.js 2.x 不支持 IE8 的缘由(IE 8 不支持此 API,且没法经过 polyfill 实现)。
https://cn.vuejs.org/v2/guide...
http://www.ruanyifeng.com/blo...
在下次 DOM 更新循环结束以后执行延迟回调。在修改数据以后,当即使用这个回调函数,获取更新后的 DOM。
// 修改数据 vm.msg = 'Hello' // DOM 还未更新 Vue.nextTick(function () { // DOM 更新 })
https://segmentfault.com/a/11...
Vue的模式是m-v-vm模式,即(model-view-modelView
),经过modelView做为中间层(即vm的实例),进行双向数据的绑定与变化。
document.createDocumentFragment()
,方法建立虚拟dom树。Object.defineProperty
定义的数据拦截,截取到数据的变化。Watcher
(观察者),从而改变虚拟dom的中的具体数据。双向绑定的实现
object.defineProperty 方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性, 并返回这个对象。 语法:Object.defineProperty(obj, prop, descriptor) var obj = {}; Object.defineProperty(obj,'hello',{ get:function(){ //咱们在这里拦截到了数据 console.log("get方法被调用"); }, set:function(newValue){ //改变数据的值,拦截下来额 console.log("set方法被调用"); } }); obj.hello//输出为“get方法被调用”,输出了值。 obj.hello = 'new Hello';//输出为set方法被调用,修改了新值
咱们能够作到数据的双向绑定:
var obj = {}; Object.defineProperty(obj,'hello',{ get:function(){ //咱们在这里拦截到了数据 console.log("get方法被调用"); }, set:function(newValue){ //改变数据的值,拦截下来额 console.log("set方法被调用"); document.getElementById('test').value = newValue; document.getElementById('test1').innerHTML = newValue; } }); //obj.hello; //obj.hello = '123'; document.getElementById('test').addEventListener('input',function(e){ obj.hello = e.target.value;//触发它的set方法 })
https://www.cnblogs.com/tugen...
VUE通常使用template来建立HTML,而后在有的时候,咱们须要使用javascript来建立html,这时候咱们须要使用render函数。
render函数return一个createElement组件中的子元素存储在组件实列中 $slots.default
中。
return createElement('h1', this.title)
; createElement
返回的是包含的信息会告诉VUE页面上须要渲染什么样的节点及其子节点。咱们称这样的节点为虚拟DOM,能够简写为VNode。
{String | Object | Function}
一个HTML标签字符串,组件选项对象,或者一个返回值类型为String/Object的函数。该参数是 必须的
子节点,可选,String 或 Array
Vue.component('anchored-heading', { render: function (createElement) { return createElement( 'h' + this.level, // 标签名称 this.$slots.default // 由子节点构成的数组 ) }, props: { level: { type: Number, required: true } } })
https://www.jianshu.com/p/316...
https://vue.docschina.org/v2/...
当子组件模板只有一个没有属性的插槽时,父组件传入的整个内容片断将插入到插槽所在的 DOM 位置,并替换掉插槽标签自己。
最初在 <slot> 标签中的任何内容都被视为备用内容。备用内容在子组件的做用域内编译,而且只有在宿主元素为空,且没有要插入的内容时才显示备用内容。
solt元素能够用一个特殊的特性name来进一步配置如何分发内容。多个插槽能够有不一样的名字。
这样能够将父组件模板中 slot 位置,和子组件 slot 元素产生关联,便于插槽内容对应传递
能够访问组件内部数据的可复用插槽(reusable slot)
在父级中,具备特殊特性 slot-scope
的<template>
元素必须存在,表示它是做用域插槽的模板。slot-scope 的值将被用做一个临时变量名,此变量接收从子组件传递过来的 prop 对象。
欢迎加入大前端学习交流群
😎🔥🔥🔥