mustache语法糖对数据类型的支持( js语法的支持 )
数据类型:
第一种划分:
基础数据类型: number string boolean
复杂数据类型: Object( array function )
特殊数据类型: null undefined
第二种划分:
初始数据类型: number string boolean null undefined
引用数据类型: object( array function )
结论: mustache支持我们js的数据类型的
conosle.log 和 alert 在我们mustache语法中是不支持的mustache 绑定 dom的属性 案例: v-html 分析: 发现dom元素直接有了一个内容 这种属性绑定就是为了操作dom 结论:
这种属性绑定的形式就是为了操作dom,我们给这种属性起了一个好听的名字 Vue 1.0 叫它 属性指令( 借鉴Angular来的 ) Vue
2.0 统称为 ‘指令’ 指令是用一个 v-xxx 表示 指令是用来操作dom Vue中不允许直接操作dom mustache语法 — 属性写法 的属性值是直接写数据的,不需要使用 {{ }} 指令: ( 是绑定在dom属性上 ) v-html: 可以解析标签型数据(
可以将一个数据展示在一个dom的内容中( 相当于使用了 innerHTML )) v-text:可以将一个数据展示在一个dom的内容中(
相当于使用了 innerHTML ) 条件渲染的指令
vue中如何给dom添加类名
size是自定义的属性, 它的属性值是undefined, 相当于是false
size也是自定义属性,他的属性是true,那么就会加上去
格式: v-bind:class = “{ 属性: boolean }”
格式: v-bind:class = “{ [data]: boolean }”
3. vue中类名绑定的形式 - 数组的形式 【 推荐 】
格式: v-bind:class = “[ 数据 ]”
4. 类名绑定不会覆盖原先的类名
5. 为什么要绑定类名
指令是用来操作dom
目的: 为了将来通过数据来操作类名,类名操作dom
参考下面这个栗子:
html代码:
v-class
vue中类名添加第一种
vue中类名添加第二种 - 对象的形式
vue中类名添加的第三种形式 - 数组形式( 推荐 )
-----------------------------------------------------------------------------------
script代码:
new Vue({
el: '#app',
data: {
msg: 'hello Vue.js',
s: 'size',
bg_color: 'bg_color',
flag: true
}
})
var a = {
name: 'gfly'
}
var b = {
name: 'lww'
}
参考下面这个栗子:
html代码:
v-show
v-show指令
v-if - 单路分支
v-if - 指令的单路分支
v-if - 双路分支
双路分支 成立
双路分支不成立
v-if - 多路分支
A
B
C
script 代码:
var vm = new Vue({
el: '#app',//给跟实例一个模板( 挂载 )
data: {
showFlag: true,
ifFlag: false,
type: 'A'
}
})
v-if 与 v-show的区别
v-for
html代码:
数组
-
item :{{ item }} -- index: {{ index }}
对象
-
value: {{ item }} -- key: {{ key }} -- {{ index }}
json
-
id: {{ item.id }}
task: {{ item.task }}
{{ index }}
嵌套
-
id: {{ item.id }}
-
todos中的数据 -- {{ todo }}
script代码:
new Vue({
el: '#app',
data: {
arr: [1,2,3,4],
obj: {
id: 1,
name: '皮卡丘',
sex: 'man',
age: 18
},
json: [
{
id: 1,
task: '放电'
},
{
id: 2,
task: '卖萌'
}
],
lists: [
{
id: 1,
todos: {
id: 1,
name: '杰尼龟'
}
},
{
id: 2,
todos: {
id: 2,
name: '妙蛙种子'
}
}
]
}
})
提到事件,那么问题来了在javascript中事件添加有几种形式?
而vue采用了第三种,也是通过属性的形式绑定在dom身上
v-on使用
事件源
事件绑定形式
事件类型
事件处理程序
v-on:eventType = " handlerName "
简写 v-on: — > @
html代码:
script代码:
var vm = new Vue({
el: '#app',
methods: {
// 存放事件处理程序
helloHandler () {
alert( 'hello' )
}
}
})
console.log( 'vm', vm )
那么如果我们通过length = 0,来清空一个数组,那么vue检测不到这个这个变动
解决方法: 1.使用splice
举个栗子:
html代码:
-
{{ item.task }}
-
{{ item }}
script代码:
new Vue({
el: '#app',
data: {
arr: [1, 2, 3],
lists: [{
id: 1,
task: '锻炼1'
}, {
id: 2,
task: '敲代码'
}]
},
methods: {
add() {
this.lists.push({
id: this.lists.length + 1,
task: '打篮球'
})
},
remove() {
this.lists.pop()
},
indexHandler() {
this.lists[1] = {
id: 2,
task: 'gfly'
}
// 将整个列表清空
this.lists.length = 0
// this.lists.splice( 0 )加上之后才能检测到
},
arrChange() {
this.arr[1] = 'gfly' //不可以检测到的
}
}
})
解决方法:2使用 Vue.set / this.$set
将arrChange中的代码换成下面这行
this.$set(this.arr, '1', 'gfly')
v-model
双向数据绑定
默认绑定value值
v-model应用于表单元素
举个栗子:
html代码:
{{ msg }}
script代码:
new Vue({
el: '#app',
data: {
msg: 'hello Vue.js'
}
})