返回
后台管理项目开发笔记2:掌握关键技术,打造高效、易用的系统
前端
2023-09-21 01:03:18
一、三级联动(子传父)
三级联动是一种常见的前端交互设计,它允许用户通过在父级列表中选择项来动态更新子级列表的内容。在Vue中,我们可以通过使用v-model
指令和@change
事件来实现三级联动。
<template>
<div>
<select v-model="province">
<option v-for="item in provinces" :value="item.value">{{ item.label }}</option>
</select>
<select v-model="city">
<option v-for="item in cities" :value="item.value">{{ item.label }}</option>
</select>
<select v-model="district">
<option v-for="item in districts" :value="item.value">{{ item.label }}</option>
</select>
</div>
</template>
<script>
export default {
data() {
return {
provinces: [{
value: '1',
label: '北京市'
}, {
value: '2',
label: '上海市'
}],
cities: [],
districts: []
};
},
watch: {
province(val) {
// 根据省份获取城市列表
this.getCities(val);
},
city(val) {
// 根据城市获取区县列表
this.getDistricts(val);
}
},
methods: {
getCities(province) {
// 省份改变时,获取城市列表
this.cities = [{
value: '1',
label: '东城区'
}, {
value: '2',
label: '西城区'
}];
},
getDistricts(city) {
// 城市改变时,获取区县列表
this.districts = [{
value: '1',
label: '东华门街道'
}, {
value: '2',
label: '西华门街道'
}];
}
}
};
</script>
二、展示属性
展示属性是一种Vue组件的特殊属性,它允许我们通过设置该属性的值来改变组件的展示状态。例如,我们可以通过设置v-show
属性的值来控制组件是否显示,或者通过设置v-if
属性的值来控制组件是否渲染。
<template>
<div>
<button @click="show = !show">切换展示</button>
<div v-show="show">显示的内容</div>
<div v-if="show">渲染的内容</div>
</div>
</template>
<script>
export default {
data() {
return {
show: false
};
}
};
</script>
三、attrs和listeners的组件通信
$attrs
和$listeners
是Vue组件的两个特殊属性,它们允许我们在组件之间传递数据和事件。$attrs
属性包含了父组件传递给子组件的所有属性,而$listeners
属性包含了父组件传递给子组件的所有事件监听器。
<template>
<child-component :message="message" @click="handleClick"></child-component>
</template>
<script>
export default {
data() {
return {
message: 'Hello World'
};
},
methods: {
handleClick() {
console.log('子组件被点击了');
}
}
};
</script>
<template>
<div>
<p>{{ message }}</p>
<button @click="$emit('click')">点击我</button>
</div>
</template>
<script>
export default {
props: ['message'],
methods: {
handleClick() {
this.$emit('click');
}
}
};
</script>
四、el-pagination的使用
el-pagination
是Element UI中的一个分页组件,它提供了丰富的分页功能,包括页码导航、跳转到指定页码、设置每页显示条数等。
<template>
<div>
<el-pagination
:current-page="currentPage"
:page-size="pageSize"
:total="total"
@current-change="handleCurrentChange"
@size-change="handleSizeChange"
>
</el-pagination>
</div>
</template>
<script>
export default {
data() {
return {
currentPage: 1,
pageSize: 10,
total: 100
};
},
methods: {
handleCurrentChange(val) {
console.log(`当前页: ${val}`);
},
handleSizeChange(val) {
console.log(`每页条数: ${val}`);
}
}
};
</script>
五、请求业务分析
请求业务分析是一种对后端请求进行分析的技术,它可以帮助我们了解请求的性能、安全性、可靠性等指标,以便我们能够及时发现和解决问题。
// 定义一个请求业务分析类
class RequestAnalysis {
constructor() {
this.requests = [];
}
// 添加一个请求
addRequest(request) {
this.requests.push(request);
}
// 分析请求
analyzeRequests() {
// 计算请求的平均响应时间
const avgResponseTime = this.requests.reduce((acc, curr) => acc + curr.responseTime, 0) / this.requests.length;
// 计算请求的成功率
const successRate = this.requests.filter(request => request.status === 200).length / this.requests.length;
// 计算请求的失败率
const failureRate = 1 - successRate;
// 输出分析结果
console.log(`平均响应时间: ${avgResponseTime}ms`);
console.log(`成功率: ${successRate * 100}%`);
console.log(`失败率: ${failureRate * 100}%`);
}
}
// 创建一个请求业务分析实例
const requestAnalysis = new RequestAnalysis();
// 添加一些请求
requestAnalysis.addRequest({
url: 'https://example.com/api/v1/users',
method: 'GET',
responseTime: 100,
status: 200
});
requestAnalysis.addRequest({
url: 'https://example.com/api/v1/products',
method: 'POST',
responseTime: 200,
status: 201
});
requestAnalysis.addRequest({
url: 'https://example.com/api/v1/orders',
method: 'PUT',
responseTime: 300,
status: 400
});
// 分析请求
requestAnalysis.analyzeRequests();
六、照片墙收集
照片墙收集是一种收集和展示照片的技术,它可以帮助我们创建出美观、有趣的照片墙。
<template>
<div class="photo-wall">
<div class="photo-item" v-for="photo in photos" :key="photo.id">
<img :src="photo.url" alt="">
</div>
</div>
</template>
<script>
export default {
data() {
return {
photos: [
{
id: 1,
url: 'https://example.com/images/photo1.jpg'
},
{
id: 2,
url: 'https://example.com/images/photo2.jpg'
},
{
id: 3,
url: 'https://example.com/images/photo3.jpg'
}
]
};
}
};
</script>