核心:
1、Vue.js是一个允许采用简洁的模板语法来声明式地将数据渲染进DOM系统
2、在编写代码时,你不需要关注DOM操作,只需要关注逻辑层面即可。
3、组件系统。
示例:
//注册一个“todo-item”Vue组件
Vue.component('todo-item', {
props: ['todo'],
template: '{{ todo.text }} '
})
//{{var}}差值表达式
var app7 = new Vue({
//接管id为app-7的DOM元素,与该DOM节点绑定
//挂载点
el: '#app-7',
//数据
data: {
groceryList: [
{ id: 0, text: '蔬菜' },
{ id: 1, text: '奶酪' },
{ id: 2, text: '随便其它什么人吃的东西' }
]
}
})
//bind属性绑定:单向绑定
//v-model:双向绑定
生命周期图示
模板语法
{{}}:差值表达式(Mustache):
- 文本:Message: {{ msg }}
- 原始html:
- JS表达式:{{ ok ? 'YES' : 'NO' }}
*注意:该特性不能作用于Html特性上,遇到这种情况应该使用 v-bind 指令
指令
指令 | 功能 | 简写 | 备注 |
---|---|---|---|
v-if,v-else-if, v-else | 条件渲染 | 没有 | 用 key 管理可复用的元素 |
v-for | 遍历 | 没有 | 1、支持一个可选的第二个参数为当前项的索引key 属性,理想的 key 值是每项都有的唯一 id |
v-bind | 属性绑定 | : | |
v-on | 事件绑定 | @ | |
v-show | 条件渲染 | 没有 | v-show 的元素始终会被渲染并保留在 DOM 中,v-if则会销毁 |
Vue实例属性:
var app = new Vue({
//挂载点
el : "",
//数据
data : {},
//方法
methods : {},
//计算属性
computed : {},
//监听属性
watch : {}
})
class和style绑定
1、绑定从class
1、对象语法
data: {
isActive: true,
hasError: false
}
结果渲染为:
2、数组语法
data: {
activeClass: 'active',
errorClass: 'text-danger'
}
结果渲染为:
//注:用在组件上会在组件原基础上添加class
绑定style
1、内联绑定
1、对象语法
//v-bind:style 的对象语法十分直观——看着非常像 CSS,但其实是一个 JavaScript 对象。CSS 属性名可以用驼峰式 (camelCase) 或短横线分隔 (kebab-case,记得用单引号括起来) 来命名
data: {
activeColor: 'red',
fontSize: 30
}
//直接绑定到一个样式对象通常更好,这会让模板更清晰
data: {
styleObject: {
color: 'red',
fontSize: '13px'
}
}
2、数组语法
//数组语法可以将多个样式对象应用到同一个元素上
事件修饰符
...
...
2.1.4 新增
2.3.0 新增
...
使用修饰符时,顺序很重要;相应的代码会以同样的顺序产生。因此,用 v-on:click.prevent.self 会阻止所有的点击,而 v-on:click.self.prevent 只会阻止对元素自身的点击。
按键修饰符
记住所有的 keyCode 比较困难,所以 Vue 为最常用的按键提供了别名
全部的按键别名:
https://cn.vuejs.org/v2/guide/events.html
可以通过全局 `config.keyCodes` 对象[自定义按键修饰符别名](https://cn.vuejs.org/v2/api/#keyCodes):
组件*
示例
// 定义一个名为 button-counter 的新组件
Vue.component('button-counter', {
data: function () {
return {
count: 0
}
},
template: ''
})
new Vue({ el: '#components-demo' })
注:
1、你可以将组件进行任意次数的复用:每个组件单独维护它的“count”,因为没用一次组件,就会有一个它的实例被创建。
2、因为组件是可复用的 Vue 实例,所以它们与 new Vue 接收相同的选项,例如 data、computed、watch、methods 以及生命周期钩子等。仅有的例外是像 el 这样根实例特有的选项。
data必须是一个函数
data: {
count: 0
}
通过props向子组件传递数据 (相当于函数的参数)
//当一个值传递给一个prop特性的时候,它就变成了那个组件实例的一个属性。
Vue.component('blog-post', {
props: ['title'],
template: '{{ title }}
'
})
//使用
*每个组件必须只有一个“根元素”。你可以将模板的内容包裹在一个父元素内
通过事件向父级组件发送消息
调用内建的 $emit
方法并传入事件的名字,来向父级组件触发一个事件
Vue.component('blog-post', {
props: ['post'],
template: `
{{ post.title }}
//向父组件发送一个“enlarge-text'”事件
`
})
new Vue({
el: '#blog-posts-events-demo',
data: {
posts: [
{ id: 1, title: 'My journey with Vue' },
{ id: 2, title: 'Blogging with Vue' },
{ id: 3, title: 'Why Vue is so fun' }
],
postFontSize: 1
}
})
通过插槽分发内容
Vue.component('alert-box', {
template: `
Error!
`
})
——————————更多内容——————————————