Vue
基础语法
mustache 语法
<h2>{{ one + '' + two }}</h2>
<h2>{{ one }} {{ two }}</h2>
<h2>{{ three * 2 }}</h2>
data() {
return {
one: '一',
two: '二',
three: 3
}
}
通过{{}}
,template里既可以使用**data()**里面定义的数据啦
低频指令
- 本质就是自定义属性
这些指令很少使用~
v-cloak
防止页面加载时出现闪烁问题
<div v-cloak>{{ msg }}</div>
data() {
return {
msg: 'hello'
}
}
[v-cloak] {
display: none;
}
v-text
- 用于将数据填充到标签中,作用与插值表达式类似,但是没有闪动问题
- 如果数据中有 HTML 标签会将 html 标签一并输出
- 注意:此处为单向数据绑定,数据对象上的值改变,插值会发生变化;但是当插值发生变化并不会影响数据对象的值
<p v-text="msg"></p>
data() {
return {
msg: 'hello'
}
}
v-html
- 用法和 v-text 相似 但是他可以将 HTML 片段填充到标签中
- 可能有安全问题, 一般只在可信任内容上使用
v-html
,永不用在用户提交的内容上 - 它与 v-text 区别:v-text输出的是纯文本,浏览器不会对其再进行 html 解析,但 v-html 会将其当 html 标签解析后输出。
<p v-html="html"></p>
<p v-text="text"></p>
<p>{{ message }}</p>
data() {
return {
message: '<span>通过双括号绑定</span>',
html: '<span>html标签在渲染的时候被解析</span>',
text: '<span>html标签在渲染的时候被源码输出</span>',
}
}
v-pre
- 显示原始信息跳过编译过程
- 跳过这个元素和它的子元素的编译过程。
- 一些静态的内容不需要编译加这个指令可以加快渲染
<span v-pre>{{ this will not be compiled }}</span> <span v-pre>{{ msg }}</span>
data() {
return {
msg: 'Hello'
}
}
v-once
- 执行一次性的插值(当数据改变时,插值处的内容不会继续更新)
<span v-once>{{ msg }}</span>
data() {
return {
msg: 'Hello'
}
}
插值表达式 v-text v-html 三者区别
差值表达式 | 闪动问题---v-cloak 解决 |
---|---|
v-text | 没有闪动问题 |
v-html | 安全问题 |
自定义指令
除了 v-for、v-show、v-model 等等指令,vue 也允许我们自定义指令
在某些情况下,需要对元素进行 DOM 操作,这时就需要用到自定义指令了
通过directives 选项(局部,只能在当前组件使用;全局的要使用 app 的directive())
案例-某个元素挂载完成后自动获取焦点
<input type="text" ref="input" />
import { ref } from 'vue'
setup() {
const inputRef = ref(null)
onMounted(() => {
inputRef.value.focus()
})
return {
input
}
}
这是当前输入框,要是想其它输入框也能挂载完成之后获取焦点呢?
你可能会想到复用。非常棒!
vue 中复用代码的形式主要是组件,当然还有Composition API抽取成一个hook 函数
还有一个更简单的方法:自定义指令
我们来自定义一个v-focus指令(当然,vue 中并没有这个指令哦)
<input type="text" v-focus />
directives: {
focus: {
mounted(el) {
el.focus()
}
}
}
这是局部的,当input被挂载完成后,执行input.focus()
来看看全局是怎么做的
import { createApp } from "vue";
const app = createApp(根组件);
app.directive("focus", {
mounted(el) {
el.focus();
},
});
指令的生命周期
和组件的生命周期类似都是在特定时间节点回调对应函数
自定义指令的修饰符
自定义指令的修饰符放在哪里呢?
指令生命周期函数的第二参数
<input type="text" v-focus.test="hhh" />
directives: {
focus: {
mounted(el, bindings) {
el.focus()
console.log(bindings.modifiers)
}
}
}
你就会在控制台看到 hhh
案例-转化时间戳
在开发中,大多数情况下从