Vue3当中的一些基本语法

176 阅读8分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 2 天,点击查看活动详情

Vue3当中的一些基本语法

插值语法

在vue的模板里面,我们可以使用花括号来实现一个插值语法:

<div>{{count}}</div>

在插值语法里面可以使用vue实例对象data里面的数据,并且可以写一些基本的表达式,不是语句!

里面可以只是一个变量,也可以对变量进行一些运算(加减乘除等等),也可以使用函数,还可以使用三元表达式。

但是不能使用语句。

v-once指令

  • v-once指令用于指定元素或者组件只渲染一次:
    • 当属局发生变化的时候,元素或者组件以及其所有的子元素,都会被视为静态内容并且跳过。
    • 该指令可以用于性能优化
    • 如果是里面的子节点也只会被渲染一次:
	<div v-once>
		<h2>{{counter}}</h2>
	</div>

v-text指令

用于更新元素的textContent:

<div v-text = "msg"></div>
// 等价于
<div>{{msg}}</div>

v-html指令

默认情况下,如果我们展示的内容本身是html的,那么vue并不会对其进行特殊的解析。

如果我们希望这个html内容可以被vue解析出来,那么我们可以使用v-html来展示。

用法:

	 <div>{{msg}}</div>
     <div v-html="msg"></div>

v-pre指令

v-pre用于跳过元素和他的子元素的编译过程,显示原始的Mustache标签。

跳过不需要编译的节点,加快编译的速度。

<div v-pre>{{message}}</div>这样的运行效果就是只会出现message。

v-cloak指令

这个指令保持在元素上直到关联组件实例结束编译

和css规则如[v-cloak]{display:none}一起使用时,这个指令可以隐藏未编译的Mustache标签知道组件实例准备完毕。

v-bind的绑定属性

在实际开发当中,除了会动态绑定一些内容之外,我们可能还会需要动态绑定一些属性。这个时候就需要用到v-bind这个属性。

  • 我们可以动态绑定某个标签的class属性,或者a标签的href属性。

绑定属性我们使用v-bind:

  • 缩写::
  • 预期: any(with argument)|Object(without argument)
  • 参数: attr Or Prop(optional)
  • 修饰符:camel --> 将kebab-case attribute 名转换为camelCase
  • 用法: 动态地绑定一个或者多个attribute,或者一个组件prop到表达式

例子:

<a v-bind:href="url">{{msg}}</a>

data: function () {
        return {
            msg: '我的博客',
            url: "https://www.zmlblog.top"
        }
    },

这样我们就把url与超链接的地址给绑定起来了。

上面是v-bind 的基础使用,也就是原始的写法,但是这样写起来有点麻烦,vue给我们提供了一个语法糖:

<a :href="url">{{msg}}</a>

也就是在v-bind可以直接简写为一个:

实例在这里:这里

v-bind绑定class属性

在实际开发当中,可能某个元素的class是动态的,处于某个状态的时候,字体颜色为黑色;处于另一个状态的时候,字体颜色为红色。

这个时候就需要使用v-bind来绑定class,绑定class有两种方式:

  • 对象语法
  • 数组语法

对象语法:{'active':boolean}

可以看到在对象语法当中前面用引号括起来的就是可以绑定的类名,后面跟上了一个布尔值,当这个布尔值为真的时候,该类名就会被绑定到该元素;如果布尔值为假,那么这个类名就不会被绑定到这个元素上。

既然是一个对象,那么里面也可以是多个键值对,就像这样:<div v-bind:class="{'fontColor':isTrue,'title':isTrue}">哈哈哈哈哈哈哈</div>。 示例代码地址:这里

在对象语法里面{'active':boolean},active是用引号括起来的,当然我们也可以不使用引号,这样的话这个类名就会去data里面寻找,看在data里面有没有active这个变量,然后找到里面存放的类名。

我们使用v-bind绑定class还可以与静态的class进行结合:

<div class="abc" :class="{'fontColor':isTrue,'title':isTrue}">
    123123
</div>

最后渲染出来的结果就是类名有:abc fontColor title

数组语法:[className,className,三元表达式.....]

<div :class="['fontColor','title']">hhhhhhh</div>

这样绑定的就是两个类名:fontColor title

当然我们也可以去data里面寻找我们需要的类名:

<div :class="['fontColor',title]">hhhhhhh</div>

这段代码其中第二个值中代表的类名就需要在data里面寻找

我们还可以使用三元运算符:

<div :class="['fontColor',isTrue?'title':'']">
    hhhhhhh
</div>

在这里我们就会去判断isTrue是否为真,如果为真,那么就把title这个类名绑定到元素上,否则就绑定一个空的类名(也就是不绑定任何类名)。

但是这样写三元表达式,代码不优雅,更优雅的方式是,在数组里面我们写上一个对象,就像这样:

<div :class="['fontColor',{title:isTrue}]">
    hhhhhhh
</div>

这样是不是就更加优雅了呢?

示例代码在:这里

v-bind绑定style

CSS Property名可以使用驼峰式(camelCase)或者短横线分隔(kebab-case,记得用引号括起来)的方式来命名。

同样的绑定方式也有两种:

  • 对象语法
  • 数组语法

对象语法:

用法::style="{属性名:'属性值'}"

可以看到在css属性值哪里有一个单引号,这是必须的,不然vue就会将属性值看做一个变量来解析。

命名方式:

  • 驼峰: fontSize
  • 短横线:font-size,使用短横线这种方式的时候,必须将属性名用引号引起来。

实例代码:这里

数组语法:

在开发当中,我们想要把多个对象里面的css属性写到一起,我们就可以使用数组的方式,将前面的对象作为数组的元素写到一起:<div :style="[styleObj,styleObj2]">哈哈哈哈</div>

注意:

如果使用数组语法的时候,如果数组里面对象的css属性有重复的,那么浏览器会根据最后一个(最右边的)属性来渲染。

示例代码在:这里

动态绑定属性

在某些情况下,我们属性的名称可能也是不固定的:

  • 前端我们无论绑定src,href,class,style属性名都是固定的。如果属性名称不是固定,我们可以使用:[属性值]='值'的格式来定义,这种绑定的方式,我们称之为动态绑定属性。

就像这样:

div :[name]="styleObj">hhhhhh</div>

name: 'style',
styleObj: {
color: 'red',
fontSize: '40px',
    },

里面的name可以换成其他的变量。

示例代码在:这里

还有一个v-bind直接绑定一个对象:示例看这里

v-on指令

v-on绑定事件:

前面我们学习了这么多的指令,但是都是一些静态的,在前端开发当中,一个重要的特性就是与用户的交互。这个时候我们就需要用到v-on指令。

用来监听胡勇大声的时间,比如点击、拖拽、键盘点击事件等等

v-on的使用:

  • 简写:@
  • 预期:Function|Inline Statement | Object
  • 参数: event
  • 修饰符:
 .stop  调用event.stopPropagation()
 .prevent  调用 event.preventDefault()
 .capture  添加事件侦听器时使用capture模式
 .self  只当事件是从侦听器绑定的元素本身触发时才触发回调
 .{keyAlias}  仅当事件是从特定触发时才触发回调
 .once   只触发一次回调
 .left  只当鼠标点击左键时触发
 .right  只当鼠标点击右键时触发
 .middle  只当鼠标点击中键时触发
 .passive  {passive:true} 模式添加侦听器
  • 绑定事件监听

v-on基本使用

一个简单的例子:

<button v-on:click="add">点我加一</button>

这个时候就是一个完整的v-on写法了,在v-on后面加上一个冒号,然后加上事件的类型(此时我们添加的点击事件),然后在后面加上事件要调用的事件函数。

也有语法糖:

<button @click="add">点我加一</button>:也就是将v-on简写为@.

如果我们要处理的事件不是很复杂,我们可以直接写一个表达式在等号后面:<button @click="this.count++">点我加一</button>

我们还可以绑定一个对象:

在绑定对象的时候,语法是这样的:v-on={'事件类型':'事件函数',......}

示例在这里

v-on的参数传递

在函数事件当中,可能会需要传递一些参数,这个时候就需要使用到v-on的参数传递。

在获取事件对象的时候,如果一个事件函数不需要传入其他参数,可以直接不写参数,在事件函数里面可以直接获取到事件对象,就像这样:

    <button @click="btn1Click">按钮1</button>
btn1Click: function (event) {
                console.log(event);
        },

这样就可以拿到事件对象。如果需要传入多个参数,那么这样就不行了。

就需要像下面这样写:

<button @click="btn2Click($event,'海绵宝宝')">按钮2</button>
btn2Click: function (event, name) {
    console.log(event);
    console.log(name);
}

可以看到在模板里面我们获取事件对象使用的是$event,这是一个固定写法。

示例代码在:这里

v-on修饰符

v-on支持修饰符,修饰符相当于对事件进行了一些特殊处理:

具体修饰符见上面

示例代码在这里