5、Vue的基础法语
Vue2与Vue3的基础语法基本相同
5.1、模版语法
模版:在HTML中使用vue相关的语法和指令。
5.1.1、插值表达式(胡须表达式)
在html中可以使用 双大括号完成数据渲染{{ 变量、调用语句、表达式、简单的运算 }}
<!DOCTYPE html>
<html lang="en">
<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>
</head>
<body>
<div id="app">
<!-- 在页面上需要渲染数据,可以使用vue中提供的插值表达式完成 -->
<h3>插值表达式:</h3>
<!-- 使用vue实例中定义的变量,data中的 -->
<p>姓名:{{ username }}</p>
<p>年龄:{{ age }}</p>
<p>性别:{{ sex }}</p>
<!-- 运算 -->
<!-- 表达式:有运算结果的式子,都算 -->
<p>加法运算:{{ 1+2 }}</p>
<p>比较运算:{{ 1 < 4 }}</p>
<p>三目运算:{{ age < 18 ? "未成年" : "成年" }}</p>
<button @click="age--">修改年龄</button>
<!-- 调用语句:后期开发中使用的比较少,函数一般都会存在返回值 -->
<p>{{ addSum }}</p>
<!-- 插值表达式中,如果渲染的数据为underline数据不会显示 -->
<p>{{ addSum(2,4) }}</p>
</div>
<script src="./js/vue3.js"></script>
<script>
let { createApp } = Vue;
// 创建app对象
const app = createApp({
// 使用data定义数据
data(){
return{
username:"张无忌",
age:23,
sex:"男"
}
},
methods:{
addSum(a,b){
console.log("a,b", a, b);
// return a + b;
}
}
});
// 让app与页面view进行绑定
app.mount("#app");
</script>
</body>
</html>
5.1.2、v-cloak
v-cloak : 用来屏蔽插值表达式在网络等原因导致数据无法渲染的时候,页面会出现{{ name }}
<!DOCTYPE html>
<html lang="en">
<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>
<!--
插值表达式的闪动问题:
仅限于使用script标签引入vue的js文件,
如果后期使用vue的脚手架创建项目,问题已经解决
-->
<div id="app">
<p v-cloak>{{name}}</p>
</div>
<script src="./js/vue3.js"></script>
<script>
let { createApp } = Vue;
// 创建app对象
const app = createApp({
data(){
return {
name:"杭州"
}
}
});
// 让app与页面view进行绑定
app.mount("#app");
</script>
</body>
</html>
5.2、文本类指令
在vue中提供了大量的指令(一共13个),快速帮助我们完成数据与页面的绑定、渲染等操作。
vue中提供的指令,都是以v-开始,如果某个指令使用频率特别高,会有简化写法。
回顾,在dom中,如果需要获取或者设置标签中的文本数据,可以通过innerHTML、innerText、textContent。
document.querySelector(".box").innerHTML += ""
5.2.1、v-html和v-text
v-text : 渲染的数据中包含html标签,标签不会被解析渲染,标签会原样显示在页面上
v-html:渲染的数据中包含html标签,标签被解析渲染
v-text和v-html,他们会将标签中默认的数据全部覆盖(替换)
{{ }} 将数据插入插值表达式所在的位置上
<body>
<div id="app">
<!-- 在标签中间通过插值表达式插入数据 -->
<p>姓名:{{ name }}</p>
<!-- 在标签上书写属性,对应的vue的指令,使用到vue选项中的数据,直接书写即可 -->
<!--
v-text : 渲染的数据中包含html标签,标签不会被解析渲染,标签会原样显示在页面上
-->
<p v-text="name2">这个数据您看不到</p>
<!--
v-html:渲染的数据中包含html标签,标签被解析渲染
-->
<p v-html="name2"></p>
</div>
<script src="./js/vue3.js"></script>
<script>
let { createApp } = Vue;
// 创建app对象
const app = createApp({
data(){
return{
name:"灭绝小甜甜",
name2:"灭绝<b>小甜甜</b>"
}
}
});
// 让app与页面view进行绑定
app.mount("#app");
</script>
</body>
5.2.2、v-pre
元素内具有 v-pre,所有 Vue 模板语法都会被保留并按原样渲染。最常见的用例就是显示原始双大括号标签及内容。
<body>
<pre>
好好学习
天天向上
</pre>
<div id="app">
<p v-pre>vue中的插值表达式格式:{{ name }}</p>
</div>
<script src="./js/vue3.js"></script>
<script>
let { createApp } = Vue;
// 创建app对象
const app = createApp({
});
// 让app与页面view进行绑定
app.mount("#app");
</script>
</body>
5.3、属性绑定
5.3.1、v-bind基本使用
v-bind:用于将标签上的属性名或属性值转成vue中的动态的数据
v-bind:属性名="变量名 | 表达式 | 调用语句"
v-bind:[属性名]="变量名 | 表达式 | 调用语句"
v-bind可以简化成:
<body>
<div id="app">
<!--
vue是基于数据驱动的方式进行编程(让程序员专注于数据的处理,而不需要进行dom操作)
不管是在页面上,还是在vue的配置项中,尽可能的去操作数据,控制渲染
在html中一个完整的标签:
<标签名 属性名="属性值" 属性名="属性值">文本数据或者子标签</标签名>
v-bind指令:让标签的属性名或属性值变成动态的数据(来自于vue配置项中)
-->
<div v-bind:name="value">123213</div>
<div v-bind:name="1+1">123213</div>
<div v-bind:name="msg()">123213</div>
<!-- 如果标签的 属性名也是动态的,需要使用[] 然后引用vue中对应的变量 -->
<div v-bind:[attrname]="attrValue">123213</div>
<hr>
<img v-bind:src="img1" alt="" width="100">
<img v-bind:src="img2" alt="" width="100">
<!-- v-bind可以简化为: -->
<img :src="img3" alt="" width="100">
</div>
<script src="./js/vue3.js"></script>
<script>
let { createApp } = Vue;
// 创建app对象
const app = createApp({
data(){
return {
value:"李四",
attrname:"age",
attrValue:23,
img1:"https://img13.360buyimg.com/babel/s1180x940_jfs/t20260529/111640/23/37858/94517/6475c864F5396934a/0bd76f0443ad5fca.png.avif",
img2:"https://img1.baidu.com/it/u=1960110688,1786190632&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=281",
img3:'https://img2.baidu.com/it/u=1906732828,3160455141&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=666'
}
},
methods:{
msg(){
return "hello";
}
}
});
// 让app与页面view进行绑定
app.mount("#app");
</script>
</body>
5.3.2、特殊使用
如果一个对象中的所有数据都需要绑定的某个标签的属性中,这是可以进行v-bind的简化属性
v-bind='对象变量名名'
<body>
<div id="app">
<!-- 一个标签上的动态属性数据都来自于某个指定的对象 -->
<img :src="imgObj.src" v-bind:alt="imgObj.alt" :width="imgObj.width">
<!-- 使用v-bind=对象,相当于底层将对象中的所有数据解构出来,放到当前这个标签上 -->
<img v-bind="imgObj">
</div>
<script src="./js/vue3.js"></script>
<script>
let { createApp } = Vue;
// 创建app对象
const app = createApp({
data(){
return {
imgObj:{
width:"100",
src: 'https://img2.baidu.com/it/u=1906732828,3160455141&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=666',
alt:"图片"
}
}
}
});
// 让app与页面view进行绑定
app.mount("#app");
</script>
</body>