vue怎么做一个loading组件
时间: 2024-02-06 11:02:25 浏览: 84
Vue 中可以通过自定义组件的方式实现 Loading 组件。以下是一个简单的实现方法:
1. 创建 Loading.vue 文件,定义组件模板和样式:
```html
<template>
<div class="loading">
<div class="loading-icon"></div>
<div class="loading-text">{{ text }}</div>
</div>
</template>
<style>
.loading {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.5);
display: flex;
justify-content: center;
align-items: center;
}
.loading-icon {
width: 50px;
height: 50px;
border-radius: 50%;
border: 5px solid #fff;
border-top-color: #3498db;
animation: loading 1s linear infinite;
}
.loading-text {
margin-top: 20px;
color: #fff;
font-size: 16px;
}
@keyframes loading {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
</style>
```
2. 在组件中定义 props 和 data:
```javascript
export default {
props: {
text: {
type: String,
default: '加载中...'
}
},
data() {
return {}
}
}
```
3. 在组件中使用 props 和 data:
```html
<template>
<div class="loading">
<div class="loading-icon"></div>
<div class="loading-text">{{ text }}</div>
</div>
</template>
<script>
export default {
props: {
text: {
type: String,
default: '加载中...'
}
},
data() {
return {}
}
}
</script>
<style>
.loading {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.5);
display: flex;
justify-content: center;
align-items: center;
}
.loading-icon {
width: 50px;
height: 50px;
border-radius: 50%;
border: 5px solid #fff;
border-top-color: #3498db;
animation: loading 1s linear infinite;
}
.loading-text {
margin-top: 20px;
color: #fff;
font-size: 16px;
}
@keyframes loading {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
</style>
```
4. 在需要使用 Loading 组件的地方引入组件,并在需要显示 Loading 时动态绑定 showLoading 属性:
```html
<template>
<div>
<button @click="fetchData">加载数据</button>
<loading :text="loadingText" v-if="showLoading"></loading>
</div>
</template>
<script>
import Loading from './Loading.vue'
export default {
components: {
Loading
},
data() {
return {
showLoading: false,
loadingText: '加载中...'
}
},
methods: {
fetchData() {
this.showLoading = true
setTimeout(() => {
this.showLoading = false
}, 3000)
}
}
}
</script>
```
这里在 fetchData 方法中设置 showLoading 属性为 true,然后使用 setTimeout 模拟异步请求,在请求结束后将 showLoading 属性设置为 false,这样 Loading 组件就会自动消失。
阅读全文