为什么要用Vue模板语法
Vue模板语法是Vue.js框架的一部分,使用它有以下几个优点:
- 简化了HTML代码编写:Vue模板语法支持简化HTML标签和属性的写法,使得代码更加简洁易读,提高开发效率。
- 数据绑定:Vue模板语法支持数据双向绑定,可以将数据自动更新到对应的DOM元素,从而避免了手动操作DOM的麻烦。
- 条件渲染:Vue模板语法支持条件渲染,可以根据特定条件来渲染特定的内容,从而提升用户体验。
- 循环渲染:Vue模板语法支持循环渲染,可以根据特定的数据进行循环渲染相同结构的元素,从而避免了重复编写代码的麻烦。 综上所述,Vue模板语法简化了HTML代码编写,提供了数据绑定、条件渲染、循环渲染等功能,使得Vue.js开发更加高效、可维护和易于扩展。
插值
插值不仅可以显示数据和JavaScript表达式,还可以显示Vue.js指令、事件和组件等内容,可以帮助开发者更加方便地操作数据和DOM元素,提高开发效率和代码可读性。
需要注意的是,Vue模板语法插值只是一种数据绑定的方式,插值中的内容必须是一些安全的文本,不能够包含HTML标签或其他恶意代码,否则会出现安全问题。对于需要渲染HTML标签的内容,应该使用Vue.js提供的v-html指令
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
<title>插值</title>
<style type="text/css">
.f30{
font-size:30px;
}
</style>
</head>
<body>
<!-- 定义vue所管理的边界,有且只有一个根节点 -->
<div id="app">
<p>文本</p>
{{msg}}
<p>html解析</p>
{{msg2}}<br>
<b :class="msg3" v-html="msg2"></b>
<p>表达式</p>
{{mun+1}}
{{warn.substr(0,2)}}
<input v-model="ok" />
{{ok?'成功了':'失败了'}}
</div>
<script type="text/javascript">
new Vue({
el:"#app",
data(){
return{
msg:'hello 小B 你相信光吗?',
msg2:'<span style="color:yellow">hello 小B</span>',
msg3:'f30',
num:6,
warn:'听到我的招换了吗?',
ok:true
};
}
});
</script>
</body>
</html>

指令
上述只是常用的一些指令,Vue.js还提供了很多强大的指令和功能,可以根据实际需要选择合适的指令使用。同时需要注意的是,在使用Vue指令时需要遵守Vue的规范,正确使用Vue指令才能发挥出它的优点,提高开发效率和代码质量。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
<title>指令</title>
</head>
<body>
<div id="app">
<p>v-if/v-else-if/v-else</p>
<input v-model="score"/><br />
<b v-if="score < 60">不及格</b>
<b v-else-if="score>60 && score< 70">及格</b>
<b v-else-if="score>70 && score< 80">一般</b>
<b v-else-if="score>80 && score< 90">良好</b>
<b v-else="">优秀</b>
<!-- 60以下 不及格
60-70 及格
70-80 一般
80-90 良好
90以上 优秀 -->
<p>v-show</p>
v-if 与v-show的区别?<br>
<b v-if="isShow">展示</b>
<b v-show="isShow">展示</b>
<p>v-for</p>
<i v-for="a in arr">{{a}} </i>
<i v-for="i,u in users">{{u.name}} {{i}}</i>
<select>
<option v-for ="h in hobby" :value="h.id">{{h.name}}</option>
</select>
<div id="" v-for="h in hobby">
<input type="checkbox" name="hobby" :value="h.id"/>{{h.name}}
</div>
<p>动态参数</p>
<input v-model="evname" />
<button v-on:[evname]="test">点我</button>
</div>
<script type="text/javascript">
new Vue({
el:"#app",
data(){
return{
score:69,
isShow:false,
arr: [1,2,3,4],
users:[{
name:'lb',id:1
},{
name:'lx',id:2
},{
name:'lz',id:3
},{
name:'lw',id:4
}],
hobby:[{
name:'洗脚',id:1
},{
name:'洗脚',id:2
},{
name:'洗脚',id:3
},{
name:'SPA',id:4
}],
evname:'click'
};
},
methods:{
test(){
//单机事件,
alert('点我试试!!! ');
}
}
});
</script>
</body>
</html>

过滤器
Vue.js的过滤器是一个强大的功能,可以让我们轻松地处理模板中的数据,提高代码的可读性和可维护性。同时需要注意的是,过滤器只适合于简单的数据格式化和处理,如果需要进行复杂的数据操作,应该使用计算属性或方法。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
<script src="date.js" type="text/javascript" charset="UTF-8"></script>
<title>过滤器</title>
</head>
<body>
<div id="app">
<p>局部过滤器基本应用</p>
{{msg}}<br />
{{msg |filterA}}
<p>局部过滤器串行应用</p>
{{msg}}<br />
{{msg |filterA |filterB}}
<p>局部过滤器传参</p>
{{msg | filterC(3,10)}}<br />
<p>全局过滤器</p>
{{time}}<br />
{{time | fmtDateFilter}}
</div>
<script type="text/javascript">
Vue.filter('fmtDateFilter', function(value) {
//value表示要过滤的内容
return fmtDate(value);
});
new Vue({
el: "#app",
filters: {
'filterA': function(v) {
return v.substring(0, 6)
},
'filterB': function(v) {
return v.substring(2, 5)
},
'filterC': function(v, begin, end) {
return v.substring(begin, end);
}
},
data() {
return {
msg: '想死了',
time: new Date()
}
},
methods: {
test() {
alert('点我试试!!!');
}
}
});
</script>
</body>
</html>

排座
<!DOCTYPE html>
<html>
<head>
<title>排座</title>
<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
</head>
<body>
<div id="app">
<h2>排座</h2>
<input type="text" v-model="seatInput1">
<input type="text" v-model="seatInput2">
<input type="text" v-model="seatInput3">
<hr>
<h3>用户:</h3>
<ul>
<!-- 遍历过滤器传来的值 -->
<li v-for="user in filteredUsers" :key="user.id">{{ user.name }}</li>
</ul>
<hr>
</div>
<script>
new Vue({
el: '#app',
data: {
seatInput1: '',
seatInput2: '',
seatInput3: '',
users: [{
id: 1,
name: '刘鑫'
},
{
id: 2,
name: '刘文'
},
{
id: 3,
name: '刘兵'
},
{
id: 4,
name: '刘志'
},
{
id: 5,
name: '大B'
}
]
},
/* 定义一个filteredUsers计算属性 */
computed: {
/* 使用filter方法来过滤users数组中的元素。filter方法接受一个回调函数作为参数,
该回调函数会对数组中的每个元素进行判断,并返回一个新的数组,其中包含满足条件的元素。 */
filteredUsers() {
return this.users.filter(
/* 使用=>箭头函数的语法来定义一个匿名函数。这个匿名函数接受一个参数user,
表示users数组中的每个元素。 */
user => {
/* 使用逻辑运算符&&来判断user.name是否不等于seatInput1、seatInput2和seatInput3的值。
如果满足这个条件,说明user.name不等于任何一个输入框的值,那么这个元素就会被保留在过滤后
的数组中。 */
return user.name !== this.seatInput1 &&
user.name !== this.seatInput2 &&
user.name !== this.seatInput3
});
}
}
});
</script>
</body>
</html>

计算属性监听属性
计算属性
Vue.js的计算属性是一个非常有用的功能,它可以提高代码的可读性和可维护性,同时也可以实现复杂的数据计算和处理。如果需要进行非响应式的数据操作,建议使用methods方法。
监听属性
在上面的例子中,我们定义了一个数据属性message,并且使用watch选项来监听该数据属性的变化。当该数据属性发生变化时,会触发watch中对应的函数,实现对数据属性变化的响应。
需要注意的是,使用watch选项来监听数据属性的变化时,需要在Vue实例中显式地定义响应式的数据属性,并且需要将计算属性转为响应式的数据属性,以便在watch选项中进行监听。
总的来说,Vue.js的监听属性功能可以帮助我们实现对数据属性的变化响应,可以在实际开发过程中提高代码的可读性和可维护性。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
<title>计算属性监听属性</title>
<style type="text/css">
.f30{
font-size: 30px;
}
</style>
</head>
<body>
<div id="app">
<p>计算机属性</p>
单价:<input v-model="price" />
数量:<input v-model="num" />
小计: {{count}}
<p>监听属性</p>
千米: <input v-model="km" /><br />
米:<input v-model="m" />
</div>
<script>
new Vue({
el:'#app',
data(){
return{
price:79,
num:1,
m:1000,
km:1
};
},
computed:{
count:function(){
return this.price * this.num;
}
},
watch:{
km:function(v){
//v指的是被监听的属性,是km
this.m =parseInt(v) * 1000;
},
m:function(v){
//v指的是被监听的属性,是m
this.km = parseInt(v)/1000;
}
}
});
</script>
</body>
</html>
