Vue教程文档:
/v2/guide/
定义
实例: new Vue()
挂载点: el
数据:data
模板: template
方法:methods
计算属性: computed
类似 variable = variable()
侦听器: watch
一旦数据变化都会触发
参数:props
组件:components
组件与实例的关系:每一个组件都是一个Vue实例
父组件与子组件交互:
- 父组件通过 属性 传递给子组件参数
- 子组件通过 发布事件
$emit
传递给父组件参数,前提是父组件需要先 注册事件
使用
变量使用:使用插值表达式 {{ variable }}
文本替换:v-text="variable"
内容替换:v-html="content"
事件绑定:v-on:click="function"
等价于@click="function"
属性绑定: v-bind:title="variable"
等价于 :title="variable"
双向数据绑定: v-model="variable"
show语句:v-show="bool"
为真时显示
if语句:v-if="bool"
为真时加入dom
for语句:<li v-for="(item, index) of list" :key="index">{{item}}</li>
实例
第一个Vue实例 插值表达式
<div id="hello">{{ hello }}</div>
<script>
//Vue实例
new Vue({
el: "#hello",
data: {
hello: "hello world"
}
})
</script>
hello world
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
挂载点, 实例, 模板
<div id="root">
<!-- 挂载点 -->
</div>
<script>
// 实例
new Vue({
el: "#root",
// 模板, 如果实例中没有定义模板,则默认使用挂载点里边的dom元素为模板
template: "<h1>hello template {{ msg }}</h1>",
data: {
msg: "this is message",
}
})
</script>
hello template this is message
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
文本替换
<div id="text" v-text="number"></div>
<script>
new Vue({
el: "#text",
data: {
number: 123456,
}
})
</script>
123456
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
内容替换 事件绑定
方法 v-on:等价于@
<div id="html" v-on:click="handleClick" @dblclick="handleDoubleClick" v-html="content"></div>
<script>
new Vue({
el: "#html",
data:{
content: "<h1>this is content</h1>"
},
methods: {
handleClick: function(){
this.content = "<h1> click</h1>"
},
handleDoubleClick: function(){
this.content = "<h1>double click</h1>"
}
}
})
</script>
this is content
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
属性绑定
使用v-bind之后,相单于一个js表达式 等价于:title
<div id="bind" v-bind:title="'hello ' + title">this is title</div>
<script>
new Vue({
el:"#bind",
data: {
title: "this is a title"
}
})
</script>
this is title
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
双向数据绑定
<div id="db-bind">
<input type="text" v-model="content">
<div>{{ content }}</div>
</div>
<script>
new Vue({
el:"#db-bind",
data: {
content: "this is data double bind"
}
})
</script>
this is data doubldasdase bind
this is data doubldasdase bind
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
计算属性
<div id="computed">
<input type="text" v-model="firstName">
<input type="text" v-model="lastName">
<div>{{ fullName }}</div>
<div>{{ count }}</div>
</div>
<script>
new Vue({
el:"#computed",
data: {
firstName: "",
lastName: "",
count: 0
},
// 计算属性
computed: {
fullName: function(){
return this.firstName + " " + this.lastName
}
},
// 侦听器, 一旦数据变化都会触发
watch: {
fullName: function(){
this.count ++
}
}
})
</script>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
v-if v-show v-for
<div id="vif">
<div v-if="show">v-if从dom中移除(适合一次操作)</div>
<div v-show="show">v-show从dom中隐藏(适合多次操作)</div>
<button @click="handleClick">toggle</button>
<ul>
<li v-for="item of list">{{item}}</li>
<!-- 以下方法增加key,可以提升性能 -->
<li v-for="(item, index) of list" :key="index">{{item}}</li>
</ul>
</div>
<script>
new Vue({
el: "#vif",
data: {
show: true,
list: ["first", "second", "third", "fourth"]
},
methods: {
handleClick: function(){
this.show = !this.show
}
}
})
</script>
v-if从dom中移除(适合一次操作)
v-show从dom中隐藏(适合多次操作)
toggle
first
second
third
fourth
first
second
third
fourth
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
TodoList实例
<div id="todolist">
<input type="text" v-model="inputValue">
<button @click="handleSubmit">确定</button>
<!-- 普通方式添加 -->
<ul>
<global></global>
<li v-for="(item, index) of list" :key="index">{{ item }}</li>
<local></local>
</ul>
<!-- 通过全局组件 -->
<ul>
<todo-item
v-for="(item, index) of list"
:key="index"
:content="item"
:index="index"
@delete="handleDelete"
><!-- 通过全局组件 -->
</todo-item>
</ul>
</div>
<script>
// 全局组件
("global", {
template: "<li>item-global</li>"
})
// 组件与实例的关系:每一个组件都是一个Vue实例,
("todo-item", {
props: ["content", "index"], //接收参数,通过属性传递值
template: '<li @click="handleClick">{{content}} {{index}}</li>', //显示
methods: {
handleClick: function(){
this.$emit("delete", this.index) //子组件通过发布和父组件通讯
}
}
})
// 父组件与子组件通讯,交互
// 父组件通过 属性 传递给子组件参数
// 子组件通过 发布事件 传递给父组件参数,前提是父组件需要先 注册事件
// 局部组件
var Local = {
template: "<li>item-local</li>"
}
new Vue({
el:"#todolist",
// 注册局部组件
components: {
"local": Local
},
data:{
inputValue: "",
list: []
},
methods: {
handleSubmit: function(){
this.(this.inputValue);
this.inputValue = "";
},
handleDelete: function(index){
this.(index, 1)
}
}
})
</script>
确定
item-global
sf
fsdfsdf
item-local
sf 0
fsdfsdf 1
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81