返回

后台管理项目开发笔记2:掌握关键技术,打造高效、易用的系统

前端

一、三级联动(子传父)

三级联动是一种常见的前端交互设计,它允许用户通过在父级列表中选择项来动态更新子级列表的内容。在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>