Vue的基本用法及模板语法

Vue.js使用了基于 HTML 的模板语法,允许开发者声明式地将 DOM 绑定至底层  Vue实例的数据。所有 Vue.js的模板都是合法的 HTML,所以能被遵循规范的浏览器和 HTML 解析器解析。

在底层的实现上,Vue将模板编译成虚拟 DOM 渲染函数。结合响应系统,Vue`能够智能地计算出最少需要重新渲染多少组件,并把 DOM 操作次数减到最少。

1.创建一个Vue实例

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Title</title>
	<!--1- 引入核心模块,提供了构造函数Vue	-->
	<script src="lib/vue.js"></script>
</head>
<body>

</body>
<script>
	// 1- vm即是Vue实例。
	// 2- Vue构造函数接收一个配置对象。
	// 3- 配置对象中可以设置data属性(类型是一个对象)
	// 4- data对象的属性会作为vm的实例属性(记住)。
	// 5- 建议将方法放置到methods属性中(类型也是一个对象)
	// const vm = new Vue({
	// 	// 实例中的数据
	// 	data:{
	// 		a:1,
	// 		b:2,
	// 		c:{
	// 			userName:"zhangsan"
	// 		},
	// 		d:[1,2,3]
	// 	},
	// 	// 定义方法
	// 	methods:{
	// 		fn(){
	//
	// 		}
	// 	}
	// });
	// console.log(vm);


	// 关于data的特点:
	// 1- data中的属性会作为Vue实例中的属性
	// 2- data的属性值发生改变,那么Vue实例中对应的属性值也会发生改变
	// 3- Vue实例中的属性值发生改变,那么data中的属性值也会发生改变。
	const data = {
		a:1
	}
	const vm = new Vue({
		data
	});
	data.a = 100;
	vm.a = 200;
	console.log(vm.a,data.a);
</script>
</html>

2.Vue挂载

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Title</title>
	<script src="lib/vue.js"></script>
</head>
<body>
	<div class="root" id="root">
		<h1>{{str}}</h1>
		<h1>{{this.str}}</h1>
		<h1>{{vm.str}}</h1>
	</div>
</body>
<script>
	// 注意重点:在Vue模板中可以直接使用Vue实例中的属性或方法(不需要使用this,不需要使用this)
	// 注意重点:模块中可以使用this(不建议),说明模块所处的环境上下文中的this指向的是Vue实例。
	// 挂载(Vue实例挂载):指定Vue实例应用的范围(元素)
	const vm = new Vue({
		// 将ID为root的元素作为Vue实例挂载的元素(挂载的元素自此可以称为Vue模板)
		// el:document.querySelector("#root"),
	
		// 将ID为root的元素作为Vue实例挂载的元素(挂载的元素自此可以称为Vue模板)
		// el:"#root",
	
		// 将class为root的元素作为Vue实例挂载的元素( 不建议)
		// el:".root",
	
		// 将标签名字为div的元素作为Vue实例挂载的元素( 不建议)
		// el:"div",
	
		// el:"body",// 不允许
		// el:"html",// 不允许
		data:{
			str:"我现在开始学习Vue,第一步要进行挂载",
			vm:{
				str:"vm"
			}
		}
	})
</script>
</html>

2.1相同Vue实例挂载到不同元素

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Title</title>
	<script src="lib/vue.js"></script>
</head>
<body>
<div id="one">
	<h1>{{str}}</h1>
</div>
<div id="two">
	<h1>{{str}}</h1>
</div>
</body>
<script>
	// 同一个页面,支持多个实例挂载至不同元素中。
	new Vue({
		el:"#one",
		data:{
			str:"one"
		}
	})
	new Vue({
		el:"#two",
		data:{
			str:"two"
		}
	})
</script>
</html>

3.插值表达式

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Title</title>
	<script src="lib/vue.js"></script>
</head>
<body>
	<div id="root">
		<!--将Vue实例下的属性num进行渲染-->
		<p>{{num}}</p>
		<!--将Vue实例下的属性str进行渲染-->
		<p>{{str}}</p>
		<!--将字符串进行渲染-->
		<p>{{"str"}}</p>
		<!--将数字进行渲染-->
		<p>{{1}}</p>
		<!--将Vue实例下的属性bol进行渲染-->
		<p>{{bol}}</p>
		<!--将布尔值进行渲染-->
		<p>{{false}}</p>
		<!--将Vue实例下的属性fn进行渲染-->
		<p>{{fn}}</p>
		<!--将Vue实例下的fn函数运行的结果进行渲染-->
		<p>{{fn()}}</p>
		<!--将Vue实例下的属性arr进行渲染-->
		<p>{{arr}}</p>
		<!--将Vue实例下的属性obj进行渲染-->
		<p>{{obj}}</p>
		<p>{{null}}</p>
		<p>{{undefined}}</p>
		<p>{{sex===1?"男":"女"}}</p>
		<p>{{str.split("").reverse().join("")}}</p>
		<template></template>
	</div>
</body>
<script>
	// 总结1:插值表达式支持字符串,数字,布尔,对象,数组,方法
	// 总结2:undefined,null不会进行任何输出(与React相同)
	// 总结3:数组不支持直接展开(React支持)
	// 总结4:支持输出对象(React不支持)
	// 总结5:Vue中包裹标签为<template></template>

	new Vue({
		el:"#root",
		data:{
			num:1,
			str:"师法魔级超",
			bol:true,
			arr:[1,2,3,4],
			sex:1,
			obj:{
				userName:"zhangsan"
			}
		},
		methods:{
			fn(){
				return this.str.split("").reverse().join("");
			}
		}
	})
</script>
</html>

4.vue中的指令

4.1v-html与v-text

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Title</title>
	<script src="lib/vue.js"></script>
</head>
<body>
	<div id="root">
		<h3>v-text</h3>
		<p v-text="userName">{{str}}</p>
		<p v-text='userName'>{{str}}</p>
		<p v-text=userName>{{str}}</p>
		<p v-text=`userName`>{{str}}</p>
		<hr/>
		<h3>v-html</h3>
		<p v-html="userName">{{str}}</p>
		<p v-html='userName'>{{str}}</p>
		<p v-html=userName>{{str}}</p>
		<p v-html=`userName`>{{str}}</p>
		<template v-html="userName">123</template>
	</div>
</body>
<script>
	// 响应式:视图是通过数据进行驱动的(当数据发生改变,视图会根据所使用的数据的变化而变化)
	// 响应式即是视图会响应最新的数据。
	// v-text与v-html的共同特点:
	// 1- 值是一个字符串
	// 2- 该字符串会作为Vue实例的属性名,将对应的属性值在指令所在的标签中进行输出。
	// 3- 会覆盖原有数据。
	// 4- 属性值可以使用双引号,单引号
	// 5- 属性值也可以省略双引号,单引号
	// 6- 如果使用的是反引号会将包裹的值在标签中直接输出
	// 7- 无法与template结合使用。
	// v-text与v-html的区别:
	// v-text不支持HTML标签而v-html支持。
	new Vue({
		el:"#root",
		data:{
			str:"我是一个字符串",
			userName:"zhangsan"
		}
	})

</script>
</html>

4.2v-if v-else-if v-else(条件渲染)

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Title</title>
	<script src="lib/vue.js"></script>
</head>
<body>
<div id="root">
	<p>{{isShow}}</p>
	<p>{{isShow && "你好&&"}}</p>
	<p>{{isShow || "你好||"}}</p>
	<!-- 三元表达式	-->
	<p>{{sex===1?"男":"女"}}</p>
	<p>{{fn()}}</p>
	<!--多条件1-->
	<p>{{getAgeStr()}}</p>
	<!--多条件2-使用指令-->
	<p v-if="age>80">老年</p>
	<p v-else-if="age>40">中年</p>
	<p v-else-if="age>28">壮年</p>
	<p v-else-if="age>18">青年</p>
	<p v-else-if="age>12">少年</p>
	<p v-else-if="age>6">儿童</p>
	<p v-else>婴儿</p>
	<hr/>
	<template v-if="isLogin">您好,欢迎您的到来!</template>
	<template v-else>
		<input type="text" placeholder="请输入管理员账号">
		<input type="text" placeholder="请输入管理员密码">
	</template>
</div>
</body>
<script>
	// 注意1:v-if以及v-else-if的值是一个布尔值,如果成立则渲染指令所在的元素,不成立则不渲染
	// 注意2:v-else-if需要与v-if结合使用
	// 注意3:v-else=需要与v-if或v-else结合使用
	// 注意4:v-if,v-else-if,v-else指令所在的元素之间不要出现其它元素。

	new Vue({
		el:"#root",
		data:{
			isShow:true,
			sex:1,
			age:100,
			isLogin:true
		},
		methods:{
			fn(){
				return this.sex===1?"男":"女"
			},
			getAgeStr(){
				if(this.age>80) return "老年";
				if(this.age>40) return "中年"
				if(this.age>28) return "壮年"
				if(this.age>18) return "青年"
				if(this.age>12) return "少年"
				if(this.age>6) return "儿童"
				return "婴儿"
			}
		}
	})
</script>
</html>

4.3v-show

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Title</title>
	<script src="lib/vue.js"></script>
</head>
<body>
<div id="root">
<!--	<p v-if="isShow">v-if</p>-->
<!--	<p v-show="isShow">v-show</p>-->
<!--	<p v-show='isShow'>1</p>-->
<!--	<p v-show=isShow>2</p>-->
	<p v-show="'isShow'">3</p>
	<p v-show="''">4</p>
	<p v-show="1">5</p>
	<p v-show="0">6</p>
	<p v-show="true">7</p>
	<p v-show="false">8</p>
	<p v-show="null">9</p>
	<p v-show="undefined">10</p>
</div>
</body>
<script>
	// v-if与v-show的值都是布尔值。
	// v-if为true表示渲染元素,false表示不渲染元素
	// v-show为true表示显示元素,false表示隐藏元素(通过display:none)
	// 注意1:空字符串,0,undefined,null作为判断条件相当于false
	// 注意2:非空字符串,1作为判断条件相当于true
	new Vue({
		el:"#root",
		data:{
			// isShow:true
		}
	})
</script>
</html>

4.4v-bind(属性渲染)

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Title</title>
	<script src="lib/vue.js"></script>
</head>
<body>
<div id="root">
	<!--未使用v-bind,直接设置属性值,而不需要使用Vue的实例属性	-->
	<img width="50" src="https://img12.360buyimg.com/pop/s590x470_jfs/t1/169453/32/37700/50662/64ae6e63Fffd824d7/f6409309d91610b1.jpg.avif" alt="">
	<hr/>
	<!-- 将Vue实例属性imgSrc的值作为src的属性值。	-->
	<img v-bind:width="imgW" v-bind:src="imgSrc" alt=""/>
	<hr/>
	<!-- 使用v-bind,直接设置属性值,而不需要使用Vue的实例属性	-->
	<img v-bind:width="300" v-bind:src="'https://img12.360buyimg.com/pop/s590x470_jfs/t1/169453/32/37700/50662/64ae6e63Fffd824d7/f6409309d91610b1.jpg.avif'" alt="">
	<hr/>
	<a href="http://www.baidu.com">百度</a>
	<hr/>
	<!-- 将字符串作为href的属性值-->
	<a v-bind:href='"http://www.baidu.com"'>{{siteName}}</a>
	<hr/>
	<!-- 将实例属性siteHref作为href的属性值	-->
	<a v-bind:href="siteHref">{{"百度3"}}</a>
	<hr/>
	<!-- 将实例属性w的值作为img的属性的名字。	-->
	<img v-bind:[w]="imgW" v-bind:[h]="imgH" v-bind:[s]="imgSrc" alt=""/>

	<hr/>
	<a :href="siteHref">{{"百度3"}}</a>
	<img :width="imgW" :src="imgSrc" alt="">
	<img :[w]="imgW" :[s]="imgSrc" alt="">
</div>
</body>
<script>
	// v-bind:属性名 有一个简写形式:冒号
	new Vue({
		el:"#root",
		data:{
			imgSrc:"https://img12.360buyimg.com/pop/s590x470_jfs/t1/169453/32/37700/50662/64ae6e63Fffd824d7/f6409309d91610b1.jpg.avif",
			imgW:200,
			imgH:400,
			siteName:"百度2",
			siteHref:"http://www.baidu.com",
			w:"width",
			h:"height",
			s:"src"
		}
	})
</script>
</html>

4.5style特殊

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Title</title>
	<script src="lib/vue.js"></script>
</head>
<body>
<div id="root">
	<!-- 字符串	-->
	<p style="background:yellow;color:red;">1</p>
	<p :style="'background:yellow;color:red;'">2</p>
	<p :style='"background:yellow;color:red;"'>3</p>
	<p :style ="one">4</p>
	<!-- 对象	-->
	<p :style="{background:'green',color:'pink'}">5</p>
	<p :style="two">6</p>
	<!-- 数组	-->
	<p :style="[{background:'yellow'},{color:'red'}]">7</p>
	<p :style="[bg,cl]">8</p>
</div>
</body>
<script>
	new Vue({
		el:"#root",
		data:{
			one:"background:yellow;color:red;",
			two:{background:'green',color:'pink'},
			bg:{
				background:"yellow"
			},
			cl:{
				color:"red"
			}
		}
	})
</script>
</html>

4.6class特殊

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Title</title>
	<style>
		.bg{
			background:yellow;
		}
		.cl{
			color:red;
		}
	</style>
	<script src="lib/vue.js"></script>
</head>
<body>
<div id="root">
	<!-- 字符串	-->
	<p class="bg">1</p>
	<p class="cl">2</p>
	<p class="bg cl">3</p>
	<p :class="'bg cl'">4</p>
	<p :class="one">5</p>
	<!-- 对象:常用	-->
	<!-- class绑定的值可以是对象,对象的属性名即是样式类的名字,值是布尔。如果为true类生效,否则无效	-->
	<p :class="{bg:false,cl:true}">6</p>
	<!-- 数组	-->
	<p :class="['bg','cl']">7</p>


</div>
</body>
<script>
	new Vue({
		el:"#root",
		data:{
			one:'bg cl'
		}
	})

</script>
</html>

 4.7v-on 事件

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Title</title>
	<script src="lib/vue.js"></script>
</head>
<body>
<div id="root">
	<h3>{{num}}</h3>
<!--	未简写:-->
	<!-- 1-语句	-->
<!--	<button v-on:click="num++">加1</button>-->
	<!-- 2-函数:当点击按钮会调用Vue实例中的函数changeNum	-->
<!--	<button v-on:click="changeNum">加2</button>-->
	<!-- 3-调用函数:函数名后加括号不会被立即调用	-->
<!--	<button v-on:click="changeNum2(3,$event)">加3</button>-->

	<!-- 1-语句	-->
	<button @click="num++">加1</button>
	<!-- 2-函数:当点击按钮会调用Vue实例中的函数changeNum	-->
	<button @click="changeNum">加2</button>
	<!-- 3-调用函数:函数名后加括号不会被立即调用	-->
	<button @click="changeNum2(3,$event)">加3</button>
</div>
</body>
<script>
	// 语句:如果操作语句比较简单,建议直接写语句
	// 函数:如果操作比较复杂或要在多个不同的地方调用且不需要传递参数使用函数
	// 调用函数:如果操作比较复杂或要在多个不同的地方调用且需要传递参数使用调用函数
	//         如果要传递事件对象可以通过$event
	// v-on可以简写:@
	new Vue({
		el:"#root",
		data:{
			num:0
		},
		methods:{
			changeNum(e){
				this.num+=2;
				// console.log("changeNum",this)
				// console.log(e.target.innerText)
			},
			changeNum2(num,e){
				this.num+=num;
				// console.log("changeNum2",num)
				console.log(e.target.innerText)
			}
		}
	})
</script>
</html>

4.8v-model

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Title</title>
	<script src="lib/vue.js"></script>
</head>
<body>
<div id="root">
	<!-- 单向绑定:视图不会更新数据,但数据发生改变视图会改变	-->
<!--	<input v-bind:value="str" type="text">-->
<!--	<input :value="str" type="text">-->

	<!-- 双向绑定:视图发生改变数据会变,数据改变视图也会改变	-->
<!--	<input @input="changeStr" :value="str" type="text">-->
<!--	<input @input="str=$event.target.value" :value="str" type="text">-->
<!--	<input @input="changeStr2($event)" :value="str" type="text">-->

	<!-- 可以通过v-model指令实现双向绑定	-->
	<input v-model="str" type="text">
	<!-- 注意:v-model只可以与表单元素结合使用-->
<!--	<div v-model="str"></div>-->
	<h3>{{str}}</h3>
</div>
</body>
<script>
	new Vue({
		el:"#root",
		data:{
			str:"大家好!我叫刘德华!"
		},
		methods:{
			changeStr(e){
				this.str = e.target.value;
				// console.log(e.target.value)
			},
			changeStr2(e){
				this.str = e.target.value;
			}
		}
	})
</script>
</html>

4.8.1修饰符

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Title</title>
	<script src="lib/vue.js"></script>
</head>
<body>
<div id="root">
	<!-- 修饰符trim:去除左右空格	-->
<!--	<input v-model.trim="str" type="text">-->
<!--	<h3>青龙{{str}}白虎</h3>-->

<!-- 修饰符number:类型保持为number	-->
<!--	<input type="text" v-model.number="a">+<input type="text" v-model.number="b"> <button @click="sum=a+b">=</button>-->
<!--	<input v-model="sum" type="text">-->

<!-- 修饰符lazy:当失去焦点之后数据才会进行改变。-->
	<input v-model.lazy="str" type="text">
	<h3>{{str}}</h3>
	<h3>{{str}}</h3>
	<h3>{{str}}</h3>
	<h3>{{str}}</h3>
	<h3>{{str}}</h3>
	<h3>{{str}}</h3>
</div>
</body>
<script>
	new Vue({
		el:"#root",
		data:{
			str:"蔡徐坤",
			a:1,
			b:2,
			sum:3
		}
	})
</script>
</html>

4.9v-for(重点)

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Title</title>
	<script src="lib/vue.js"></script>
</head>
<body>
<div id="root">
	<!-- 1- 数组-->
<!--	<div v-for="item in arr">{{item}}</div>-->
<!--	<div v-for="(value,index) in arr">{{index}}:{{value}}</div>-->

	<!-- 2- 对象-->
<!--	<div v-for="item in obj">{{item}}</div>-->
<!--	<div v-for="(value,key) in obj">{{key}}:{{value}}</div>-->


	<!-- 3- 数字-->
<!--	<div v-for="item in num">{{item}}</div>-->
<!--	<div v-for="(n,i) in num">{{i}}:{{n}}</div>-->
	<!-- 4- 字符串-->
<!--	<div v-for="item in str">{{item}}</div>-->
<!--	<div v-for="(s,i) in str">{{i}}:{{s}}</div>-->
</div>
</body>
<script>
	new Vue({
		el:"#root",
		data:{
			arr:["zhangsan","wangwu","zhaoliu","yanqi","shenba","qianjiu"],
			obj:{
				userName:"zhangsan",
				age:12
			},
			num:10,// [1,2,3,4,5,6,7,8,9,10]
			str:"我爱你中国,我亲爱的母亲,我为你流泪也为你自豪!"
		}
	})
</script>
</html>

4.9.1key

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Title</title>
	<script src="lib/vue.js"></script>
</head>
<body>
<div id="root">
<!-- 使用ID-->
<!--	<div :key="item.id" v-for="item in arr">-->
<!--		<h3>《{{item.bookName}}》</h3>-->
<!--		<p>作者:{{item.author}}</p>-->
<!--		<hr/>-->
<!--	</div>-->

<!-- 使用下标 -->
	<div :key="index" v-for="(item,index) in arr">
		<h3>《{{item.bookName}}》</h3>
		<p>作者:{{item.author}}</p>
		<hr/>
	</div>
</div>
</body>
<script>
	new Vue({
		el:"#root",
		data:{
			arr:[
				{
					id:1,
					bookName:"天龙八部",
					author:"金庸"
				},{
					id:2,
					bookName: "一念永恒",
					author:"耳根"
				}
			]
		}
	})
</script>
</html>

5.适用案例

5.1js实现

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        #root button{
            padding: 5px;
            margin: 5px;
        }
        #root button.active{
            background: red;
        }
        #root div {
			width: 500px;
			height: 300px;
			border: 1px solid green;
		}
    </style>
</head>

<body>
    <div id="root">
        <button>体育</button>
        <button>娱乐</button>
        <button>财经</button>
        <div>体育新闻列表</div>
        <div>娱乐新闻列表</div>
        <div>财经新闻列表</div> 
    </div>
</body>
<script>
    const btns = document.querySelectorAll("#root button");
    const divs = document.querySelectorAll("#root div");
    let index = 0;

    btns.forEach(function(item,i){
        //不让div显示
        divs[i].style.display = "none";
        item.onclick = function(){
            //点击的和显示的div一致的话就不用管了
            if(i === index) return; 
            //不一致的话要先将元素置空
            btns[index].className = null;
            divs[index].style.display = "none";

            //将当前点击的赋值给index
            index = i;
            //将点击的显示按钮要高亮
            btns[index].className = "active";
            divs[index].style.display = "block";

        }
    });
    //默认的,开头第一个按钮
    btns[index].className = "active";
    divs[index].style.display = "block";
</script>
</html>

5.2vue实现

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<style>
    #root button {
        padding: 5px;
        margin: 5px;
    }
    
    #root button.active {
        background: red;
    }
    
    #root div {
        width: 500px;
        height: 300px;
        border: 1px solid green;
    }
    
</style>
<script src="lib/vue.min.js"></script>
<body>
    <div id="root">
        //点击的时候给index赋值 v-bind 拿到index 判断是否是对应的div
        <button @click="index=0" :class="{active:index === 0}">体育</button>
        <button @click="index=1" :class="{active:index === 1}">娱乐</button>
        <button @click="index=2" :class="{active:index === 2}">财经</button>
        //判断 index的值
        <div v-show="index === 0">体育新闻列表</div>
        <div v-show="index === 1">娱乐新闻列表</div>
        <div v-show="index === 2">财经新闻列表</div>
    </div>
</body>
<script>
    new Vue({
        el:"#root",
        data:{
            index:0
        }
    })
</script>
</html>

5.3vue高级实现 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<style>
    #root button {
        padding: 5px;
        margin: 5px;
    }
    
    #root button.active {
        background: red;
    }
    
    #root div {
        width: 600px;
        height: 300px;
        border: 1px solid green;
    }
</style>
<script src="lib/vue.js"></script>
<body>
    <div id="root">
        <button @click="index=i" :class="{active:index===i}" :key="item.id" v-for="(item,i) in newList">{{item.typeName}}</button>
        <div v-show="index ===i" v-for="(data,i) in newList">
            <p v-for="info in data.items">
                <a href="info.newsHref" target="_blank">{{info.newsTitle}}</a>
            </p>
        </div>
    </div>
    
</body>
<script>
    new Vue({
        el:"#root",
        data:{
            index:0,
            newList:[
            {
					id:1,
					typeName:"体育",
					items:[
						{
							id:11,
							newsTitle:"CBA选秀大会:陈国豪当选状元 邹阳意外跌至第五",
							newsHref:"https://fans.sports.qq.com/post.htm?id=1771451668139868317&mid=63#1_allWithElite"
						},
						{
							id:12,
							newsTitle:"从大山里的孩子到CBA职业球员,云南滑翔机矣进宏的故事有多励志?",
							newsHref:"https://new.qq.com/rain/a/20230715V03AI700"
						}
					]
				},
				{
					id:2,
					typeName:"娱乐",
					items:[
						{
							id:21,
							newsTitle:"《奔跑吧》后期团队回应!坦言压力很大,曝最后一期能播且很精彩",
							newsHref:"https://new.qq.com/rain/a/20230715V04IB500"
						},
						{
							id:22,
							newsTitle:"朱珠一边拍戏一边带娃,抱着女儿候场好心酸,两岁珠宝颜值复刻妈妈",
							newsHref:"https://new.qq.com/rain/a/20230715V041EZ00"
						}
					]
				},
				{
					id:3,
					typeName:"财经",
					items:[
						{
							id:31,
							newsTitle:"经济学家姚余栋:房地产是“黄金坑”,能熬出来,还有实实在在的需求",
							newsHref:"https://new.qq.com/rain/a/20230713V09O3D00"
						},
						{
							id:32,
							newsTitle:"国常会:我国正处于经济恢复的关键期 要做好能源电力保供工作",
							newsHref:"https://new.qq.com/rain/a/20230714A08E8400"
						}
					]
				}
            ]
        }
    })
</script>
</html>

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/887228.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

10.2 Linux_进程_进程相关函数

创建子进程 函数声明如下&#xff1a; pid_t fork(void); 返回值&#xff1a;失败返回-1&#xff0c;成功返回两次&#xff0c;子进程获得0(系统分配)&#xff0c;父进程获得子进程的pid 注意&#xff1a;fork创建子进程&#xff0c;实际上就是将父进程复制一遍作为子进程&…

【基础算法总结】链表篇

目录 一&#xff0c; 链表常用技巧和操作总结二&#xff0c;算法原理和代码实现2.两数相加24.两两交换链表中的节点143.重排链表23.合并k个升序链表25.k个一组翻转链表 三&#xff0c;算法总结 一&#xff0c; 链表常用技巧和操作总结 有关链表的算法题也是一类常见并且经典的题…

STM32-HAL库驱动DHT11温湿度传感器 --2024.9.28

目录 一、教程简介 二、驱动原理讲解 &#xff08;一&#xff09;通信4步骤 &#xff08;二&#xff09;传感器数据解析 三、CubeMX生成底层代码 &#xff08;一&#xff09;基础配置 &#xff08;二&#xff09;配置DHT11的驱动引脚 &#xff08;三&#xff09;配置串口 四…

pytest(三)——参数化@pytest.mark.parametrize

目录 前言 参数化场景 实际Web UI自动化中的开发场景&#xff0c;比如是一个登录框 parametrize单参数 “笛卡尔积”&#xff0c;多个参数化装饰器 重点知识 参考文献 前言 pytest.mark.parametrize 允许在测试函数或类中定义多组参数和fixtures pytest_generate_tests 允…

对于基础汇编的趣味认识

汇编语言 机器指令 机器语言是机器指令的集合 机器指令展开来讲就是一台机器可以正确执行的命令 电子计算机的机器指令是一列二进制数字 &#xff08;计算机将其转变为一列高低电平&#xff0c;使得计算机的电子器件受到驱动&#xff0c;进行运算 寄存器&#xff1a;微处理器…

C(九)while循环 --- 军训匕首操情景

匕首操&#xff0c;oi~oi~oi~~~~~ 接下来的几篇推文&#xff0c;杰哥记录的是三大循环结构的运行流程及其变式。 本篇的主角是while循环。&#x1f449; 目录&#xff1a; while循环 的组成、运行流程及其变式关键字break 和 continue 在while 循环中的作用while 循环的嵌套题目…

C/C++逆向:数据类型识别

在逆向工程中&#xff0c;数据类型识别是理解程序逻辑的重要步骤&#xff0c;因为它直接影响对程序逻辑和功能的理解&#xff0c;识别出数据类型有助于确定变量的含义和函数的行为。在分析恶意软件或者寻找安全漏洞时&#xff0c;识别数据类型能够帮助发现代码中的潜在问题。例…

【越学学糊涂的Linux系统】(5)shell命令以及运行原理|权限问题

Ⅰ.shell命名以及运行原理&#xff1a; 0x00引用&#xff1a; 什么是shell命令&#xff1f;&#xff1f; ✔️ Shell 是一种命令行解释器&#xff08;Command - Line Interpreter&#xff09;&#xff0c;它为用户提供了与操作系统内核进行交互的接口。用户通过在 She…

【Qt】控件概述(3)—— 显示类控件

显示类控件 1. QLabel——标签1.1 setPixmap设置图片1.2 setAlignment设置文本对齐方式1.3 setWordWrap设置自动换行1.4 setIndent设置缩进1.5 setMargin设置边距1.6 body 2. QLCDNumber2.1 使用QTimer实现一个倒计时效果2.2 使用循环的方式实现倒计时 3. QProgressBar——进度…

【工程测试技术】第6章 信号处理初步,频谱分析,相关系数

目录 6.1 数字信号处理的基本步骤 6.2 离散信号及其频谱分析 6.2.1 概述 6.2.2 时域采样、混叠和采样定理 6.2.3 量化和量化误差 6.2.4 截断、泄漏和窗函数 6.2.5 频域采样、时域周期延拓和栅栏效应 6.2.6 频率分辨率、整周期截断 6.3 相关分析及其应用 6.3.1 两…

【C++】--类与对象(1)

&#x1f9c7;个人主页: 起名字真南 &#x1f32d;个人专栏:【数据结构初阶】 【C语言】 【C】 目录 1 类的定义1.1 类定义格式1.1.1 Stack类1.1.2 Date类1.1.3 Struct格式 1.2 访问限定符1.3 类域 2 实例化2.2 对象大小 3 this指针 1 类的定义 1.1 类定义格式 1 class为定义…

解决磁盘负载不均——ElasticSearch 分片分配和路由设置

ES 分片分配&#xff08;Shard Allocation&#xff09;时间点&#xff1a; 初始恢复&#xff08;Initial Recovery&#xff09;副本分配&#xff08;Replica Allocation&#xff09;重平衡&#xff08;Rebalance&#xff09;节点添加或移除 小结&#xff1a; 准备移除节点时&a…

【Golang】关于Go语言字符串转换strconv

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

k8s-集群部署1

k8s-集群部署1 一、基础环境准备二、docker环境准备三、k8s集群部署1.kubeadm创建集群2.使用kubeadm引导集群 总结 一、基础环境准备 首先&#xff0c;需要准备三个服务器实例&#xff0c;这里我使用了阿里云创建了三个实例&#xff0c;如果不想花钱&#xff0c;也可以在VM上创…

1panel申请https/ssl证书自动续期

参考教程 https://hin.cool/posts/sslfor1panel.html #Acme 账户 #1panel.腾讯云dns账号 这里有一步不需要参考,腾讯云dns账号,就是子帐号授权 直接控制台搜索 访问管理 创建用户 授权搜索dns,选择第一个 点击用户名,去掉AdministratorAccess权限 5.点击api密钥生成即可…

CSS3练习--电商web

免责声明&#xff1a;本文仅做分享&#xff01; 目录 小练--小兔鲜儿 目录构建 SEO 三大标签 Favicon 图标 布局网页 版心 快捷导航&#xff08;shortcut&#xff09; 头部&#xff08;header&#xff09; logo 导航 搜索 购物车 底部&#xff08;footer&#xff0…

初学51单片机之I2C总线与E2PROM二

总结下上篇博文的结论&#xff1a; 1&#xff1a;ACK信号在SCL为高电平期间会一直保持。 2&#xff1a;在字节数据传输过程中如果发送电平跳变&#xff0c;那么电平信号就会变成重复起始或者结束的信号。&#xff08;上篇博文的测试方法还是不能够明确证明这个结论&#xff0…

字符串和字符数组(2)

6.求字符串长度 C语言中有一个库函数叫strlen&#xff0c;这个函数是专门用来求字符串长度的。strlen的使用需要包含一个头文件string.h。 strlen函数统计的是字符串中\0之前的字符个数&#xff0c;所以传递给strlen函数的字符串中必须得包含\0. 请看代码&#xff1a; #inc…

数据结构 ——— 单链表oj题:链表分割(带哨兵位单向不循环链表实现)

目录 题目要求 手搓简易单链表 代码实现 题目要求 现有一链表的头指针 ListNode* head &#xff0c;给一定值 x &#xff0c;编写一段代码将所有小于 x 的节点排在其余节点之前&#xff0c;且不能改变原来的数据顺序&#xff0c;返回重新排列后的链表的头节点 举例说明&a…

免费送源码:Javaspringboot++MySQL springboot 社区互助服务管理系统小程序 计算机毕业设计原创定制

摘 要 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受居民的喜爱&#xff0c;社区互助服务管理系统小程序被居民普遍使用&#xff0c;为…