如何使用组合创建 Vuetify 加载按钮 api
How to create a Vuetify loading button using composition api
我正在尝试制作一个带有加载功能的简单 Vuetify 按钮。 Vuetify 有预制的组件。我正在尝试将他们提供的代码转换为与组合 api.
一起使用
我 运行 遇到 this
的问题。
这是 Vuetify 提供的内容:
<template>
<div class="text-center">
<v-btn
class="ma-2"
:loading="loading"
:disabled="loading"
color="secondary"
@click="loader = 'loading'"
>
Accept Terms
</v-btn>
</div>
</template>
<script>
export default {
data () {
return {
loader: null,
loading: false,
}
},
watch: {
loader () {
const l = this.loader
this[l] = !this[l]
setTimeout(() => (this[l] = false), 3000)
this.loader = null
},
},
}
</script>
<style>
.custom-loader {
animation: loader 1s infinite;
display: flex;
}
@-moz-keyframes loader {
from {
transform: rotate(0);
}
to {
transform: rotate(360deg);
}
}
@-webkit-keyframes loader {
from {
transform: rotate(0);
}
to {
transform: rotate(360deg);
}
}
@-o-keyframes loader {
from {
transform: rotate(0);
}
to {
transform: rotate(360deg);
}
}
@keyframes loader {
from {
transform: rotate(0);
}
to {
transform: rotate(360deg);
}
}
</style>
因此转换为合成 API,这就是我所在的位置。我的 watch
功能显然是错误的。不确定这是否是使用这个新 watch
的正确方法。另一个问题是如何处理 this
这种格式:
import { ref, watch } from '@vue/composition-api'
setup () {
let loader = ref(null)
let loading = ref(false)
watch( () => {
loader () {
const l = loader.value
this[l] = !this[l]
setTimeout(() => (this[l] = false), 3000)
loader.value = null
}
})
return {
loader,
loading,
}
}
为 3.x watch
method, the first argument should be the ref
(or array of ref
s) you want to observe; and the second argument is the handler/callback, which receives the new value and old value as its arguments (as seen for the callback in 2.x $watch
).
例如,要设置新 ref
值的记录器:
watch(myRef, (newValue, oldValue) => console.log(newValue))
// or
watch(myRef, () => console.log(myRef.value))
关于 this
:由于 loader.value
指的是其他 ref
之一,您可以为将要使用的目标 ref
创建一个查找通过 watch
回调。在此示例中,只有一个 ref
(但稍后可以添加更多):
let loading = ref(false)
const refs = {
loading
}
watch(myRef, () => {
console.log(refs['loading'].value)
})
总而言之,使用 Composition API 的翻译代码将如下所示:
import { ref, watch } from '@vue/composition-api'
export default {
setup() {
let loader = ref(null)
let loading = ref(false)
const refs = {
loading
}
watch(loader, () => {
const l = loader.value
if (!l) return
refs[l].value = !refs[l].value
setTimeout(() => (refs[l].value = false), 3000)
loader.value = null
})
return {
loader,
loading
}
}
}
我正在尝试制作一个带有加载功能的简单 Vuetify 按钮。 Vuetify 有预制的组件。我正在尝试将他们提供的代码转换为与组合 api.
一起使用我 运行 遇到 this
的问题。
这是 Vuetify 提供的内容:
<template>
<div class="text-center">
<v-btn
class="ma-2"
:loading="loading"
:disabled="loading"
color="secondary"
@click="loader = 'loading'"
>
Accept Terms
</v-btn>
</div>
</template>
<script>
export default {
data () {
return {
loader: null,
loading: false,
}
},
watch: {
loader () {
const l = this.loader
this[l] = !this[l]
setTimeout(() => (this[l] = false), 3000)
this.loader = null
},
},
}
</script>
<style>
.custom-loader {
animation: loader 1s infinite;
display: flex;
}
@-moz-keyframes loader {
from {
transform: rotate(0);
}
to {
transform: rotate(360deg);
}
}
@-webkit-keyframes loader {
from {
transform: rotate(0);
}
to {
transform: rotate(360deg);
}
}
@-o-keyframes loader {
from {
transform: rotate(0);
}
to {
transform: rotate(360deg);
}
}
@keyframes loader {
from {
transform: rotate(0);
}
to {
transform: rotate(360deg);
}
}
</style>
因此转换为合成 API,这就是我所在的位置。我的 watch
功能显然是错误的。不确定这是否是使用这个新 watch
的正确方法。另一个问题是如何处理 this
这种格式:
import { ref, watch } from '@vue/composition-api'
setup () {
let loader = ref(null)
let loading = ref(false)
watch( () => {
loader () {
const l = loader.value
this[l] = !this[l]
setTimeout(() => (this[l] = false), 3000)
loader.value = null
}
})
return {
loader,
loading,
}
}
为 3.x watch
method, the first argument should be the ref
(or array of ref
s) you want to observe; and the second argument is the handler/callback, which receives the new value and old value as its arguments (as seen for the callback in 2.x $watch
).
例如,要设置新 ref
值的记录器:
watch(myRef, (newValue, oldValue) => console.log(newValue))
// or
watch(myRef, () => console.log(myRef.value))
关于 this
:由于 loader.value
指的是其他 ref
之一,您可以为将要使用的目标 ref
创建一个查找通过 watch
回调。在此示例中,只有一个 ref
(但稍后可以添加更多):
let loading = ref(false)
const refs = {
loading
}
watch(myRef, () => {
console.log(refs['loading'].value)
})
总而言之,使用 Composition API 的翻译代码将如下所示:
import { ref, watch } from '@vue/composition-api'
export default {
setup() {
let loader = ref(null)
let loading = ref(false)
const refs = {
loading
}
watch(loader, () => {
const l = loader.value
if (!l) return
refs[l].value = !refs[l].value
setTimeout(() => (refs[l].value = false), 3000)
loader.value = null
})
return {
loader,
loading
}
}
}