当前位置:   article > 正文

使用vue+element-ui 切换主题色_vue动态切换element-ui主题

vue动态切换element-ui主题

 效果:点击切换主题颜色

头部组件:

  1. <!-- 子组件 -->
  2. <template>
  3. <view class="box">
  4. <el-tooltip class="item" effect="dark" content="特色主题" placement="bottom">
  5. <i class="el-icon-s-promotion" @click="dialogVisible = true"></i>
  6. </el-tooltip>
  7. <!-- 对话框 -->
  8. <el-dialog title="选择" :visible.sync="dialogVisible" width="50%">
  9. <div>
  10. <el-radio-group v-model="radio" @change="switchoverClick">
  11. <el-radio label="1" border size="mini">默认主题</el-radio>
  12. <el-radio label="2" border size="mini">红色主题</el-radio>
  13. <el-radio label="3" border size="mini">黑色主题</el-radio>
  14. <el-radio label="4" border size="mini">渐变主题</el-radio>
  15. </el-radio-group>
  16. </div>
  17. </el-dialog>
  18. </view>
  19. </template>
  20. <script>
  21. export default {
  22. props: ["radioIndex"], //接收父组件传过来的值
  23. data() {
  24. return {
  25. dialogVisible: false, //弹窗默认关闭状态
  26. radio: this.radioIndex //赋值(获取父组件传递过来的值)
  27. };
  28. },
  29. methods: {
  30. //方法用于点击切换radio获取value
  31. switchoverClick(e) {
  32. //this.$emit子传父方法
  33. this.$emit('bgRadio', e)
  34. },
  35. }
  36. }
  37. </script>
  38. <style lang="scss" scoped>
  39. .box {
  40. padding: 0 10px;
  41. width: 100%;
  42. height: 50px;
  43. background-color: #ffffff;
  44. box-shadow: 0 0 1px #000000;
  45. display: flex;
  46. align-items: center;
  47. .el-icon-s-promotion {
  48. cursor: pointer;
  49. font-size: 20px;
  50. }
  51. }
  52. </style>

 父组件(页面):

  1. <!-- 父组件(页面) -->
  2. <template>
  3. <view>
  4. <!-- 组件 -->
  5. <demo @bgRadio="bgRadio" :radioIndex="radioIndex"></demo>
  6. <!-- 页面 -->
  7. <view :style="[bgComputed]" class="box2"></view>
  8. </view>
  9. </template>
  10. <script>
  11. // 引入子组件
  12. import demo from '@/components/demo/index.vue'
  13. export default {
  14. data() {
  15. return {
  16. radioIndex: '1', //默认第一项
  17. };
  18. },
  19. // 注册组件
  20. components: {
  21. demo
  22. },
  23. // 计算属性
  24. computed: {
  25. bgComputed() {
  26. let style = {}
  27. switch (this.radioIndex) {
  28. case '1':
  29. style.backgroundColor = '#55ff7f'
  30. break;
  31. case '2':
  32. style.background = 'red'
  33. break;
  34. case '3':
  35. style.backgroundColor = '#000000'
  36. break;
  37. case '4':
  38. style.background = 'linear-gradient(120deg, #bc00e3, #4efffb)';
  39. break;
  40. default:
  41. console.log('没有该主题色')
  42. }
  43. return style //这一步不能漏掉
  44. }
  45. },
  46. methods: {
  47. //点击事件 子组件方法传递参数,这里需要用this.radioIndex接收参数
  48. bgRadio(e) {
  49. this.radioIndex = e
  50. }
  51. }
  52. }
  53. </script>
  54. <style lang="scss" scoped>
  55. .box2 {
  56. width: 100%;
  57. height: calc(100vh - 50px); //总高度-组件的高度=页面显示高度
  58. }
  59. </style>


 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/108949
推荐阅读
相关标签
  

闽ICP备14008679号