前端开发一些小坑

一、vue3中设置css样式+scoped属性后css失效

  • 具体问题:style标签中添加scoped属性css样式失效
<style lang="scss" scoped>
// 添加::v-deep即可解决
::v-deep.el-card {
    
    
}
</style>

二、设置样式居中

  1. 设置版心:占屏幕多少(根据屏幕自适应)
  2. 设置布局:具体的需根据计算(有UI图是最好的,若没有则自己根据屏幕去计算)

三、element-plus自定义按钮颜色

<template>
  <el-button type="primary" size="large" @click="priceQuery">查询</el-button>
</template>

<script lang="ts">
  import {
    
    
    computed,
    defineComponent,
    onMounted,
    reactive,
    ref,
    toRefs,
    watch,
    onUpdated,
  } from "vue";


  export default defineComponent({
    
    
    name: "",
    setup() {
    
    
      return {
    
    };
    },
  });
</script>

<style lang="scss" scoped>
  /* 自定义按钮默认颜色:通过type="primary" 进行颜色的改变 */
  .el-button--primary {
    
    
    background-color: #ff6501;
    border-color: #ff6501;
    /* 自定义鼠标悬浮时的颜色 */
    &:hover,
    &:focus {
    
    
      background-color: #ff8434;
      border-color: #ff8434;
    }
  }
</style>

  • 效果图如下:
    在这里插入图片描述

四、使用鼠标滚动时,css背景不固定且跟随内容进行滚动

  • css中浮动高度塌陷问题:
.all {
    
    
  width: 100%;
  height: 100%;
  background-image: red;
  overflow: auto;
 }

overflow共有5个属性:

  1. overflow: auto; 内容会被修剪,超出设置的宽高后会出现滚动条
  2. overflow: scroll; 内容会被修剪,无论内容是否超出都会出现滚动条
  3. overflow: visible; 默认属性,内容不会被修剪,内容会出现在元素框外面
  4. overflow: hidden; 内容会被修剪,多余的内容会被隐藏
  5. overflow: inherit; 会继承父元素的overflow值
  • 总结:或者可以使用监听滚动高度,当超过一定高度时添加背景颜色

五、修改element-UI框架中Message Box消息弹出框中按钮的样式

<template>

</template>

<script lang="ts">
import {
    
    
  onMounted,
  defineComponent,
} from 'vue';
import {
    
     ElMessageBox } from 'element-plus';

export default defineComponent({
    
    
  name: '',
  setup() {
    
    
  

    onMounted(() => {
    
    
      ElMessageBox.alert(
        'text内容',
        {
    
    
          type: 'warning', // 这个是icon图标的类型
          
        }
      );
    });
    return {
    
    };
  },

});
</script>
<style lang="scss" scoped>
// 在这里可以写你想写scoped的样式
</style>
// 注意这里不要加scoped,否则不会生效(注意:这样修改后会影响全局使用了MessageBox的样式,所以每个使用的地方记得将之前的样式修改回去)
<style lang="scss" >
.el-button--primary {
    
    
  background-color: red !important;
  border-color: red !important;
}
.el-button--primary:active {
    
    
  background-color: red;
  border-color: red;
}
.el-message-box__status,
.el-icon-warning {
    
    
  font-size: 33px !important;
}
</style>
  • 效果如下图所示:
    在这里插入图片描述

若还需修改其他内容可参考element-UI框架给出的MessageBox 配置项

六、element-UI框架中自封装的dialog无法弹出问题(Vue项目中)

  • 权限问题:看封装的dialog组件是否有权限限制(是否封装在src下的components中,以及在全局使用时是否全局注册了,组件的正确引用)
  • 是否放在table或table-column中:dialog是不能放在table中的
  • 是否使用了v-model:可改用:visible形式

七、使用i18n翻译中英文,需确保前后端的字段一致(Vue项目中)

  • src - constants下的enum.ts:这里是i18n的入口,若与后端字段对应不上则无论中英文都翻译不出来(定义字段时考虑语法,例如前端是否能出现big-big这种写法,但后端能用,所以定义字段时需要前后端商议)
// 这里定义的时候尽量与后端保持一致,避免出错
export enum SL{
    
    
  // big  值='值' x = 'x' 这里传的值是x即big(后端是这种传递方式,前端需与之对应)
  big = 'big ',
  // xx = 'x' 这里实际上传的值是xx即Big
  // Big = 'big',
  // small 值='值' x = 'x' 这里传的值是x即big(后端是这种传递方式,前端需与之对应)
  small = 'small',
  // xx = 'x' 这里实际上传的值是xx即Small
  // Small = 'small',
}
  • src - locales下的en.ts:这里才是前端页面所需要展示的英文名
export default {
    
    
  Sl:{
    
    
    // 这里传递的是big = 'big'
    big: 'big',
    // 这里传递的是small = 'small'
    small: 'small',
    // 这里传递的是Big = 'Big'
    // Big: 'Big',
    // 这里传递的是Small = 'Small'
    // Small: 'Small'
  },
}

  • src - locales下的zh.ts:这里才是前端页面所需要展示的中文名
export default {
    
    
  Sl:{
    
    
    // 这里传递的是big = '大的'
    big: '大的',
    // 这里传递的是small = '小的'
    small: '小的'
    // 这里传递的是Big = '大的'
    // Big: '大的',
    // 这里传递的是Small = '小的'
    // Small: '小的'
  },
}

八、前后端交互注意事项

总结:

  1. 前端调用后端接口时其接口要与后端大小写保持一致
  2. 前端定义了一个接口类,并在页面中进行调用时,此时要保证接口类的参数顺序要与页面中参数顺序保持一致
  3. 若有一不符合则接口将会报错
  4. 前端调用后端接口时,尽量先使用接口测试工具先测试接口是否能通
    若不能通,则考虑参数或环境是否是对的,若都对了,则反馈给后端

九、使用Element-UI中的element-variables.scss

  • 需求分析:符合某些条件后对某些行进行颜色区分
<template>
  <table :row-class-name="rowClassName"></table>
</template>

<script lang="ts">
import {
    
     defineComponent, reactive, toRefs } from 'vue';
import {
    
     ListVO } from '@/services/List';

export default defineComponent({
    
    
  name: 'List',
  setup() {
    
    
    const state = reactive<ViewState>({
    
    });

    return {
    
    
      ...toRefs(state),
    };
  },
  methods: {
    
    
    rowClassName({
     
      row }: {
     
      row: ListVO }) {
    
    
      // 这里写具体的业务逻辑
      // 这里是排除为undefined的情况
      if (row.changeValue === undefined) {
    
    
        return '';
      }
      // 符合不为空且总数值在100~499期间的使用low的样式(嵌套多个if不生效时可考虑使用&&)
      if (
        row.changeValue !== null &&
        row.totalNumber > 100 &&
        row.totalNumber < 500
      ) {
    
    
        return 'low';
      }
      // 符合不为空且总数值在 > 500期间的使用high的样式
      else if (row.changeValue !== null && row.totalNumber > 500) {
    
    
        return 'high';
      }
      // 都不匹配的则不使用样式 若还有其他的样式则继续嵌套使用 if - else 即可
      return '';
    },
  },
});
</script>

<style scoped lang="scss">
.middle {
    
    
  display: block;
}
</style>

<style lang="scss">
// 注意:在使用 @import '~@/element-variables.scss';时不要在style中加scoped,若加上了则以下的样式不生效
@import '~@/element-variables.scss';
.high {
    
    
  background-color: rgb(189, 85, 85) !important;
}
.low {
    
    
  background-color: rgb(127, 175, 194) !important;
}
</style>

注意:不要在style中添加scoped属性,否则样式不会生效

猜你喜欢

转载自blog.csdn.net/m0_50298323/article/details/130521410