一、代码规范
1.缩进4个空格、2个空格,推荐2个空格
二、模版语法
1、Mustache
- 将data中的文本数据,插入到HTML中
- 可以通过Mustache语法(也就是双大括号)
<body>
<div id="app">
<h2>{{message}}</h2>
<h2>{{message}},李银河</h2>
<!--musatache语法中,不仅 可以直接写变量,也可以写简单的表达式-->
<h2>{{firstName + lastName}}</h2>
<h2>{{firstName + ' ' + lastName}}</h2>
<h2>{{firstName}} {{lastName}}</h2>
<h2>{{counter * 2}}</h2>
</div>
<script src="../js/vue.js"></script>
<script>
const app = new Vue({
el: "#app",
data: {
message: '你好啊',
firstName: 'kobe',
lastName: 'bryant',
counter: 100
}
})
</script>
</body>
2、v-once
- 不希望界面随意的跟随改变,可以使用vue的一个指令:v-once
- 该指令后面不需要跟任何表达式(比如之前的v-for后面是有跟表达式的)
- 该指令表示元素和组件只渲染一次,不会随着数据的改变而改变
<body>
<div id="app">
<h2>{{message}}</h2>
<h2 v-once>{{message}}</h2>
</div>
<script src="../js/vue.js"></script>
<script>
const app = new Vue({
el: "#app",
data: {
message: '你好啊'
}
})
</script>
</body>
3、v-html
- 某些情况下,我们从服务器请求到的数据本身就是一个HTML代码
- 如果我们直接通过{{}}输出,会将HTML代码也一起输出
- 按照HTML格式进行解析,并且显示对应的内容,可以使用v-html指令
- 该指令后面往往会跟上一个string类型
- 会将string的html解析出来并进行渲染
<body>
<div id="app">
<h2>{{url}}</h2>
<h2 v-html="url">{{url}}</h2>
</div>
<script src="../js/vue.js"></script>
<script>
const app = new Vue({
el: "#app",
data: {
message: '你好啊',
url: '<a href="https://www.baidu.com">百度一下</a>'
}
})
</script>
</body>
4、v-text
- v-text作用和Mustache比较相似:都是用于 将数据显示在界面中
- v-text通常情况下,接受一个string类型
<body>
<div id="app">
<h2>{{message}}</h2>
<h2 v-text="message"></h2>
</div>
<script src="../js/vue.js"></script>
<script>
const app = new Vue({
el: "#app",
data: {
message: '你好啊'
}
})
</script>
</body>
5、v-pre
- 用于跳过这个元素和它自元素的编译过程,用于显示原本的Mustache语法
<body>
<div id="app">
<h2>{{message}}</h2>
<h2 v-pre="message">{{message}}</h2>
</div>
<script src="../js/vue.js"></script>
<script>
const app = new Vue({
el: "#app",
data: {
message: '你好啊'
}
})
</script>
6、v-cloak
- 在某些情况下,浏览器可能会直接显示出未编译的Mustache标签
- cloak:斗篷
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=<device-width>, initial-scale=1.0">
<title>Document</title>
<style>
[v-cloak]{
display: none;
}
</style>
</head>
<body>
<div id="app" v-cloak>
<h2>{{message}}</h2>
</div>
<script src="../js/vue.js"></script>
<script>
//在div解析之前,div中有一个属性v-cloak
//在div解析之后,div中没有一个属性v-cloak
setTimeout(function(){
const app = new Vue({
el: "#app",
data: {
message: '你好啊'
}
})
}, 1000)
</script>
</body>
7、v-bind
- 除了内容需要动态绑定外,某些属性我们也希望动态来绑定
- 比如动态绑定a元素的href属性
- 比如动态绑定img元素的src属性
- 这个时候,我们可以使用v-bind指令
- 作用:动态绑定属性
- 缩写::
- 预期:any(with argument)|Object (without argument)
- 参数:attrOrProp(optional)
<body>
<div id="app">
<!--错误做法,这里不可以使用Mustache语法-->
<!-- <img src="{{imgurl}}" alt=""> -->
<!-- 正确做法,使用v-bind指令 -->
<img v-bind:src="imgurl" alt="">
<a v-bind:href="arhref">百度一下</a>
<!--语法糖的写法-->
<img :src="imgurl" alt="">
<a :href="arhref">百度一下</a>
</div>
<script src="../js/vue.js"></script>
<script>
//在div解析之前,div中有一个属性v-cloak
//在div解析之后,div中没有一个属性v-cloak
const app = new Vue({
el: "#app",
data: {
message: '你好啊',
imgurl: 'https://upload-images.jianshu.io/upload_images/18396394-76fa65fca9046495.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp',
arhref: 'http://www.baidu.com'
}
})
</script>
</body>
- 很多时候,我们希望动态的来切换class,比如
- 当数据为某个状态是,字体显示红色
- 当数据另一个状态是,字体显示黑色
- 绑定class有两种方式:
- 对象语法
- 数组语法
1、v-bind动态绑定class属性:对象语法
- 对象语法的含义是:class后面跟的是一个对象
<body>
<div id="app">
<!-- <h2 class="active">{{message}}</h2>
<h2 :class="active">{{message}}</h2> -->
<!-- 通过控制boolean值决定标签是否有此类名 -->
<!-- <h2 v-bind:class="{类名1: true, 类名2: false}">{{message}}</h2> -->
<h2 v-bind:class="{active: isActive, line: isLine}">{{message}}</h2>
<h2 v-bind:class="getClasses()">{{message}}</h2>
<button v-on:click="btnclick">按钮</button>
</div>
<script src="../js/vue.js"></script>
<script>
const app = new Vue({
el: "#app",
data: {
message: '你好啊',
isActive: true,
isLine: true
},
methods:{
btnclick: function(){
this.isActive = !this.isActive
},
getClasses: function(){
return { active: this.isActive, line: this.isLine }
}
}
})
</script>
</body>
2、v-bind动态绑定class属性:数组语法
- 当class数组里没有单/双引号时,按变量处理,结果是aaaaa bbbbb
- 当class数组里有单/双引号时,按字符串处理,结果是active line
<body>
<div id="app">
<h2 class="title" v-bind:class="['active', 'line']">{{message}}</h2>
<h2 v-bind:class="getClasses()">{{message}}</h2>
<button v-on:click="btnclick">按钮</button>
</div>
<script src="../js/vue.js"></script>
<script>
const app = new Vue({
el: "#app",
data: {
message: '你好啊',
isActive: true,
isLine: true,
active: 'aaaaa',
line: 'bbbbb'
},
methods: {
getClasses: function () {
return { active: this.isActive, line: this.isLine }
}
}
})
</script>
</body>
8、v-bind绑定style
- 我们可以利用v-bind:style来绑定一些CSS内联样式
- 在写CSS属性名的时候,比如font-size,我们可以使用驼峰式,fontSize
- 或短横线分割:'font-size'
- 绑定class有两种方式
- 对象语法
- style后面跟的是一个对象类型
- 对象的key是CSS属性名称
- 对象的value是具体赋的值
- style后面跟的是一个对象类型
- 对象语法
<body>
<div id="app">
<!-- <h2 :style="{key(属性名): value(属性值)}">{{message}}</h2> -->
<!-- 50px必须加单引号,否则当成变量使用了 -->
<h2 :style="{fontSize: '50px'}">{{message}}</h2>
<!-- 把finalSize当成一个变量 -->
<!-- <h2 :style="{fontSize: finalSize}">{{message}}</h2> -->
<h2 :style="{fontSize: finalSize + 'px', color: finalColor}">{{message}}</h2>
<h2 :style="getStyle()">{{message}}</h2>
</div>
<script src="../js/vue.js"></script>
<script>
const app = new Vue({
el: "#app",
data: {
message: '你好啊',
finalSize: 100,
finalColor: 'red'
},
methods:{
getStyle: function (){
return { fontSize: this.finalSize + 'px', color: this.finalColor }
}
}
})
</script>
</body>
- 数组语法
- style后面跟的是一个数组类型:多个值,分割即可
<body>
<div id="app">
<h2 :style="[baseStyle, baseStyle1]">{{message}}</h2>
</div>
<script src="../js/vue.js"></script>
<script>
const app = new Vue({
el: "#app",
data: {
message: '你好啊',
baseStyle: {backgroundColor: 'red'},
baseStyle1: {fontSize: '100px'}
}
})
</script>
</body>