v-model
本质是v-bind:value和
v-on:input 的语法糖
可以等价于<input v-bind:value="message" v-on:input="message=$event.target.value" placeholder="edit me">如果写在一个自定义子组件中@input="$emit('input', $event)"
记住
@click.stop
@click.prevent
@keypress.enter
:money:sync=”total”
v-on 缩写
<!-- 完整语法 —><a v-on:click="doSomething">...</a><!-- 缩写 —><a @click="doSomething">...</a>
stop
阻止事件继续向上传播(默认都是冒泡事件)
prevent
阻止默认事件
Sync
Sync为了解决父组件和子组件数据传递的双向绑定问题
在组件中维护一个单向数据流有利于数据的传递
示例代码
父组件使用sync自动处理bar的同步问题
<comp :foo.sync="bar"></comp>
等价于
父组件监听update:foo事件
<comp :foo="bar" @update:foo="val => bar = val"></comp>或者<comp :foo="bar" @update:foo="bar = $event"></comp>
子组件更新值
this.$emit('update:foo', newValue)
父组件和子组件的数据传递问题

v-on后面也可以绑定自定义的事件,主要是在组件中。下面的代码中ListItem是一个组件,remove是一个自定义事件,我对他的理解更像是一个回调函数,内部依然是dom事件+$emit的处理。
<ListItemv-for="todoitem in todoList"v-bind:key="todoitem.id"v-bind:todoitem="todoitem"v-on:remove="removeItem"></ListItem>
原生事件绑定组件的问题
原生事件绑定到组件,官方的方案是通过native完成
https://cn.vuejs.org/v2/guide/components-custom-events.html#%E5%B0%86%E5%8E%9F%E7%94%9F%E4%BA%8B%E4%BB%B6%E7%BB%91%E5%AE%9A%E5%88%B0%E7%BB%84%E4%BB%B6
但是如果根元素不是对应元素存在问题,具体看我在vue实验室的另一篇博客
https://www.yuque.com/bo939y/ubkqtp/un3aln
Props
用kebab-case (短横线分隔命名) 命名
存在样式1 (数组)
props: ['title', 'likes', 'isPublished', 'commentIds', 'author']
存在样式2 (字典可以指定类型)
props: {title: String,likes: Number,isPublished: Boolean,commentIds: Array,author: Object,callback: Function,contactsPromise: Promise // or any other constructor}
静态传值
<blog-post title="My journey with Vue"></blog-post>
动态
<blog-post v-bind:title="post.title"></blog-post>
重要:prop值为数字、布尔、数组、对象的时候,要用v-bind,否则就会当成字符串了!同理,传递字符串属性的时候,也要当心v-bind造成的变对象问题。这些细节看起来简单,真碰上查起来还耗心神。
单向数据流原则
按照vue设计原则,props是父组件传递给子组件的,子组件只有不改,如果要加工使用,不能直接修改props。
通过data、computed来进行二次加工实现。
v-directive
主要用于dom操作
