vue的常用指令
指令 (Directives) 是带有“v-”前缀的特殊属性,由vue提供的。每一个指令在vue中都有固定的作用。
在vue中提供了很多指令,常用的有:{{变量名}},v-if、v-model、v-for、v-html、@事件名或:属性名=等等。
指令会在vm对象的data选项数据发生变化时,会同时改变元素中的其控制的内容或属性。
因为vue的历史版本原因,所以有一部分指令都有两种写法:
vue1.xvue2.x以后描述
v-html
v-html
输出html内容到双标签中
v-text="普通文本"
{{普通文本}}
输出纯文本内容到双标签中
v-bind:属性名
:属性名
把属性中的内容当成vue变量进行输出
v-on:事件名
@事件名
绑定事件操作
属性操作
格式:
<标签名 :标签属性="data变量名">标签名>
三种方式
{{ str1 }}
淘宝 变量写法
显示/隐藏密码
代码:
密码:
var vm = Vue.createApp({
data(){
return {
input_type: 'password',
btn_text:'显示密码',
}
},
methods: {
show_password(){
// 显示密码
if(this.input_type == "password"){
this.input_type = "text";
this.btn_text = "隐藏密码";
}else{
this.input_type = "password";
this.btn_text = "显示密码";
}
}
}
}).mount("#app");
事件绑定
基本写法
<标签名 @click="num+=5">按钮标签名>
<标签名 @click="方法名">按钮标签名>
<标签名 @click="方法名(参数1,参数2,....)">按钮标签名>
vue中常用事件的写法对照:
vue写法原生javascript写法描述
@click
onclick
鼠标点击事件
@dblclick
ondblclick
鼠标双击事件
@submit
onsubmit
表单提交事件
@focus
onfocus
获取焦点事件
@blur
onblur
失去焦点事件
@change
onchange
值发生改变事件
....
...
...
商品增加减少数量
步骤:
给vue对象添加操作数据的方法
在标签中使用指令调用操作数据的方法
var vm = Vue.createApp({
data(){
return {
num: 0,
}
},
methods: {
sub(){
if(this.num<=0){
return false
}
this.num--;
},
check_num(){
if(this.num<=0){
this.num = 0;
}
}
}
}).mount("#app");
基于事件操作,完成表单的数据校验
span.tips{
font-size: 12px;
color: red;
margin-left: 5px;
}
登录账号:
登录密码:
确认密码:
var vm = Vue.createApp({
data(){
return {
username:"root",
password:'',
password2:'',
}
},
methods: {
check_username(){
if(this.username.length<4|| this.username.length >12){
this.$refs.username_tip.innerHTML = "请输入4-12个字符长度的登录账号";
return true;
}
},
clear_tips(name){
this.$refs[name].innerHTML ="";
},
check_password(){
if(this.password.length<6||this.password.length>16){
this.$refs.password_tip.innerHTML = "请输入6-16个字符长度的登录密码";
return true;
}
},
check_password2(){
//验证密码与确认密码是否一样
if(this.password !== this.password2){
this.$refs.password2_tip.innerHTML = "登录密码与确认密码必须一致";
return true;
}
},
submit_form(){
if(this.check_username()||this.check_password()||this.check_password2()){
console.log("验证失败,无法提交数据");
return false;
}
}
}
}).mount("#app");
操作样式
操作样式,本质就是属性操作,使用冒号
2.3.1 控制标签class类名
格式:
元素
# 值可以是变量名、对象、对象的变量名、数组、数组变量.p1{
background-color: yellow;
}
.p2{
color: red;
}
用法1::class属性值是一个class类名的变量
一段文本信息
用法2::class属性值是一个json对象
一段文本信息
var vm = Vue.createApp({
data(){
return {
cls1: "p1",
b1: true,
b2:true,
}
},
methods: {
}
}).mount("#app");
.p1{
background-color: yellow;
}
.p2{
color: red;
}
用法3::class属性值是一个对象变量名
一段文本信息
var vm = Vue.createApp({
data(){
return {
cls1: "p1",
b1: true,
b2:true,
p_clsl:{
p1:true,
p2:true,
}
}
},
methods: {
}
}).mount("#app");
.p1{
background-color: yellow;
}
.p2{
color: red;
}
用法4::class属性值是一个数组,数组的成员是data中声明的用于控制样式的json对象
一段文本信息
用法5: :class属性值时一个数组变量名
一段文本信息
var vm = Vue.createApp({
data(){
return {
cls1: "p1",
b1: true,
b2:true,
p_clsl:{
p1:true,
p2:true,
},
cls2:{
p2:true,
},
cls3:{
p1:true,
},
arr:[
{p1:true},
{p2:true},
]
}
},
methods: {
}
}).mount("#app");
.p1{
background-color: yellow;
}
.p2{
color: red;
}
用法4::class属性值是一个数组,数组的成员是data中声明的用于控制样式的json对象
一段文本信息
用法5: :class属性值时一个数组变量名
一段文本信息
注意::class属性在同一个标签中,只能出现一次,后面出现的:class属性会被vue忽略掉,但是:class可以和class属性组合使用,
class也只能在同一个标签中出现一次
一段文本信息
var vm = Vue.createApp({
data(){
return {
cls1: "p1",
b1: true,
b2:true,
p_clsl:{
p1:true,
p2:true,
},
cls2:{
p2:true,
},
cls3:{
p1:true,
},
arr:[
{p1:true},
{p2:true},
]
}
},
methods: {
}
}).mount("#app");
总结:
1. 给元素绑定class类名,最常用的就是第1,2,3种。
vue对象的data数据:
data(){
return {
cls1: "p1",
b1: true,
b2: true,
p_cls1: {
p1: true,
p2: false
},
cls2: {
p2: true,
},
}
},
html元素:
最终浏览器效果:
控制标签style样式
工作中基本很少出现style控制样式,一个规范不允许,另一个就是代码不好维护
用法1::style的值是一个json对象
一段文本信息
用法2::style的值是一个对象变量名
一段文本信息
用法3::style的值是一个数组,数组的成员是样式组成的对象
用法4::style的值是一个数组变量名
var obj = {
backgroundColor: "red",
"border-radius": "100%",
}
var vm = Vue.createApp({
data(){
return {
size: '24px',
col1: 'red',
sty1: {
"text-align": "center",
"color": "yellow",
"background-color": "red",
},
sty2: {
"width": '150px',
"height": '150px',
},
sty3: {
"background-color": "red",
},
sty_list: [
obj,{
"width": '150px',
"height": '150px',
},
]
}
},
methods: {
}
}).mount("#app");
基本样式:
p{
padding: 0;
margin: 0;
}
.title-list span{
display: inline-block; /* 设置元素的显示模式:行级块状元素 */
height: 60px;
line-height: 60px;
width: 120px;
background-color: #bbb;
text-align: center;
cursor: pointer;
}
.title-list .activate{
background-color: yellow;
}
.content-list .content{
background-color: yellow;
display: none;
width: 370px;
height: 280px;
}
.content-list .current{
display: block;
}
国内新闻
国际新闻
银河新闻
国内新闻列表
国内新闻列表
国内新闻列表
国内新闻列表
国内新闻列表
国际新闻列表
国际新闻列表
国际新闻列表
国际新闻列表
国际新闻列表
银河新闻列表
银河新闻列表
银河新闻列表
银河新闻列表
银河新闻列表
特效实现,代码:
p{
padding: 0;
margin: 0;
}
.title-list span{
display: inline-block; /* 设置元素的显示模式:行级块状元素 */
height: 60px;
line-height: 60px;
width: 120px;
background-color: #bbb;
text-align: center;
cursor: pointer;
}
.title-list .activate{
background-color: yellow;
}
.content-list .content{
background-color: yellow;
display: none;
width: 370px;
height: 280px;
}
.content-list .current{
display: block;
}
国内新闻
国际新闻
银河新闻
国内新闻列表
国内新闻列表
国内新闻列表
国内新闻列表
国内新闻列表
国际新闻列表
国际新闻列表
国际新闻列表
国际新闻列表
国际新闻列表
银河新闻列表
银河新闻列表
银河新闻列表
银河新闻列表
银河新闻列表
var vm = Vue.createApp({
data(){
return{
index: 0,
}
},
methods: {
change_index(num){
console.log(num);
this.index=num;
},
}
}).mount("#optioncart")
代码运行效果:
条件渲染指令
vue中提供了两个指令可以用于判断是否要显示元素,分别是v-if和v-show。
v-if
欢迎回到xx网站,{{username}}
var vm = Vue.createApp({
data(){
return {
username:"root",
}
}
}).mount("#app")
v-else
v-else指令来表示 v-if 的“else 块”,v-else 元素必须紧跟在带 v-if 或者 v-else-if 的元素的后面,否则它将不会被识别。
欢迎回到xx网站,{{username}}
欢迎访问xx网站,尊敬的游客!
欢迎访问xx网站,尊敬的游客!2
var vm = Vue.createApp({
data(){
return {
username:"",
}
}
}).mount("#app")
v-else-if
v-if后面可以出现0个或多个v-else-if语句,而v-else-if后面可以跟着0个或1个v-else子语句。
欢迎回到xx网站,{{username}}
欢迎访问xx网站,尊敬的游客!
欢迎访问xx网站,尊敬的游客!2
您是普通会员!
您是vip会员!
您是vvip会员!
您是svip会员!
您是签到会员!
var vm = Vue.createApp({
data(){
return {
username:"",
level: 0,
}
}
}).mount("#app")
v-show
v-show用法和v-if大致一样,区别在于2点:
v-show后面不能v-else或者v-else-if
v-show隐藏元素时,使用的是css样式的display:none来隐藏的,
而v-if是直接从HTML文档中移除元素[ DOM操作中的remove ]
[v-show]欢迎回到xx网站,{{username}}
欢迎回到xx网站,{{username}}
您是普通会员!
您是vip会员!
您是vvip会员!
您是svip会员!
您是签到会员!
var vm = Vue.createApp({
data(){
return {
username:"",
level: 0,
}
}
}).mount("#app")
当HTML页面中有使用了vue以外的其他前端插件,这些插件也操作了和vue控制的内容范围重叠的内容,则需要使用v-show。
列表渲染指令
在vue中,可以通过v-for指令可以将一组数据渲染到页面中,数据可以是数组或者对象。
book in book_list
.table{
border-collapse: collapse;
border: 1px solid red;
width: 600px;
}
.table td,table th{
border: 1px solid red;
height: 40px;
line-height: 40px;
font-size: 12px;
text-align: center;
}
循环显示数组内容
| ID | title | price |
|---|---|---|
| {{book.id}} | {{book.title}} | {{book.price}} |
var vm = Vue.createApp({
data(){
return {
book_list:[
{"id":11,"title":"图书名称1","price":200},
{"id":21,"title":"图书名称2","price":200},
{"id":31,"title":"图书名称3","price":200},
{"id":41,"title":"图书名称4","price":200},
]
}
}
}).mount("#app")
(book,key) in book_list
.table{
border-collapse: collapse;
border: 1px solid red;
width: 600px;
}
.table td,table th{
border: 1px solid red;
height: 40px;
line-height: 40px;
font-size: 12px;
text-align: center;
}
循环显示数组内容
| 序号[正序] | 序号[倒序] | ID | title | price |
|---|---|---|---|---|
| {{key+1}} | {{book_list.length-key}} | {{book.id}} | {{book.title}} | {{book.price}} |
var vm = Vue.createApp({
data(){
return {
book_list:[
{"id":11,"title":"图书名称1","price":200},
{"id":21,"title":"图书名称2","price":200},
{"id":31,"title":"图书名称3","price":200},
{"id":41,"title":"图书名称4","price":200},
]
}
}
}).mount("#app")
.table{
border-collapse: collapse;
border: 1px solid red;
width: 600px;
}
.table td,table th{
border: 1px solid red;
height: 40px;
line-height: 40px;
font-size: 12px;
text-align: center;
}
循环显示数组内容
| 序号[正序] | 序号[倒序] | ID | title | price | 是否第一行数据 | -->是否最后一行数据 | -->||
|---|---|---|---|---|---|---|---|---|
| {{key+1}} | {{book_list.length-key}} | {{book.id}} | {{book.title}} | {{book.price}} | √ | × | √ | -->× |
var vm = Vue.createApp({
data(){
return {
book_list:[
{"id":11,"title":"图书名称1","price":200},
{"id":21,"title":"图书名称2","price":200},
{"id":31,"title":"图书名称3","price":200},
{"id":41,"title":"图书名称4","price":200},
]
}
}
}).mount("#app")
.table{
border-collapse: collapse;
border: 1px solid red;
width: 600px;
}
.table td,table th{
border: 1px solid red;
height: 40px;
line-height: 40px;
font-size: 12px;
text-align: center;
}
.table attr{
line-height: 18px;
}
循环显示对象属性
| ID | 标题 | 价格 | 属性 |
|---|---|---|---|
| {{book.id}} | {{book.title}} | {{book.price}} |
{{attr}}: {{value}}
|
var vm = Vue.createApp({
data(){
return {
book_list: [
{"id":31,"title":"图书名称1","price":200, "attr_data": {"正文语种": "英文", "页数": "541", "开本": "16开", "出版时间": "2000-11-01", "出版社": "人民邮电出版社"}},
{"id":12,"title":"图书名称2","price":200, "attr_data": {"正文语种": "中文", "页数": "511", "开本": "16开", "出版时间": "2010-11-01", "出版社": "人民邮电出版社"}},
{"id":33,"title":"图书名称3","price":200, "attr_data": {"页数": "501", "出版时间": "2019-12-01", "出版社": "人民邮电出版社"}},
{"id":54,"title":"图书名称4","price":200, "attr_data": { "页数": "671", "开本": "16开", "出版时间": "2019-03-01", "出版社": "人民邮电出版社"}},
{"id":14,"title":"图书名称4","price":200, "attr_data": {}},
]
}
}
}).mount("#app")
练习:
goods_list: [
{"name":"python入门","price":150},
{"name":"python进阶","price":100},
{"name":"python高级","price":75},
{"name":"python研究","price":60},
{"name":"python放弃","price":110},
]
# 把上面的数据采用table表格输出到页面,价格大于100的一行数据需要添加背景色橙色[orange]
第一种方案
.table{
border-collapse: collapse;
border: 1px solid red;
width: 600px;
}
.table td,table th{
border: 1px solid red;
height: 40px;
line-height: 40px;
font-size: 12px;
text-align: center;
}
.bg{
background-color: orange;
}
循环显示对象属性
| 序号 | 商品名字 | 价格 |
|---|---|---|
| {{key+1}} | {{good.name}} | {{good.price}} |
var vm = Vue.createApp({
data(){
return {
goods_list: [
{"name":"python入门","price":150},
{"name":"python进阶","price":100},
{"name":"python高级","price":75},
{"name":"python研究","price":60},
{"name":"python放弃","price":110},
]
}
}
}).mount("#app")
第二方案
.table{
border-collapse: collapse;
border: 1px solid red;
width: 600px;
}
.table td,table th{
border: 1px solid red;
height: 40px;
line-height: 40px;
font-size: 12px;
text-align: center;
}
.bg{
background-color: orange;
}
循环显示对象属性
| 序号 | 商品名字 | 价格 | 购买数量 |
|---|---|---|---|
| {{key+1}} | {{goods.name}} | {{goods.price}} |
var vm = Vue.createApp({
data(){
return {
goods_list: [
{"name":"python入门","price":150,num: 0},
{"name":"python进阶","price":100,num: 0},
{"name":"python高级","price":75,num: 0},
{"name":"python研究","price":60,num: 0},
{"name":"python放弃","price":110,num: 0},
]
}
},
methods: {
sub(goods){
goods.num-=10;
if(goods.num<0){
goods.num = 0;
}
}
}
}).mount("#app")
翻译
搜索
复制