如何根据用户类型更改 VueJS 中的背景

Posted

技术标签:

【中文标题】如何根据用户类型更改 VueJS 中的背景【英文标题】:How to change background in VueJS per user type 【发布时间】:2020-09-11 00:26:36 【问题描述】:

我有一个 vuejs 项目。

“用户”级别(和公共区域)具有 BG 图像 “管理员”级别具有纯白色背景。

我读到如果我在模板中使用不带 scoped 关键字的标签,它会影响一切,所以我尝试了,但没有产生预期的结果。

我尝试放入父 div,它几乎可以正常工作,除了在退出页面时,图像不会覆盖整个页面,一个很大的空白区域。

直到最近我才在 header 组件的 body 上使用 css。下面的 CSS 来自我尝试将其应用于父 div

.backgroundCompany
  background-color: white;


.backgroundUser
  background: url('/img/bg_img.png') no-repeat center center fixed;
    -webkit-background-size: cover;
    -moz-background-size: cover;
    background-size: cover;
    -o-background-size: cover;
    min-height: 100%;

我对此进行了测试:*** #49516424 和 and *** #48172814

已编辑:附上 App.vue 中发生的部分截图,作为 div id=app 的样式。否则效果很好。管理员让纯白背景的用户看到了这个,但它并没有覆盖整个身体。

【问题讨论】:

【参考方案1】:

假设您希望更改组件的背景图像,在该组件的模板中执行此操作很简单,您可以利用类属性并根据 userType 动态更改类(这里我从道具中获取但如何获取用户类型值、计算属性、存储、http 调用等取决于您。)

<template>
  <div :class="userType === 'user' ? 'backgroundUser' : 'backgroundCompany'">
    .....
  </div>
</template>
export default 
  props: 
    userType: 
      type: String,
      required: true
    
  

<style scoped>
  .backgroundCompany
  background-color: white;


.backgroundUser
  background: url('/img/bg_img.png') no-repeat center center fixed;
    -webkit-background-size: cover;
    -moz-background-size: cover;
    background-size: cover;
    -o-background-size: cover;
    min-height: 100%;

</style>

【讨论】:

不,不是组件,我成功地做到了,我的字面意思是body标签。我以前的测试有 userHeader 和 adminHeader 组件,其样式标签没有作用域。每个都有一个 body CSS。 我可以测试一个类似的方法,但分配 body 而不是 backgroundUser 和 backgroundCompany,看看它是如何工作的。【参考方案2】:

您的问题是在更改用户时正确地重新渲染组件。您可以在 Vue 模板的标签中添加样式。并在此添加 :key 以重新渲染,就像这样:

  <template>
     <div :style="styleObject" :key="uniqKey">
            // your code
     </div>
   </template>

    <script>
        export default 
          data() 
             return 
               styleObject: 
                 backgroundImage: `url($require('@/assets/path/to/your/img.jpg'))`   
              ,
            uniqKey:0 // change this for re-render
          ,
          methods: 
            forceRerender() 
              this.styleObject.backgroundImage = '' //new image 
              this.uniqKey+= 1;  
            
          
           
    </script>

您可以阅读更多关于它的信息here。

【讨论】:

以上是关于如何根据用户类型更改 VueJS 中的背景的主要内容,如果未能解决你的问题,请参考以下文章

vuejs:根据每个循环的 vuejs 中数组中的 2 个变量更改 <div> 的宽度

如何根据存储在数据库中的类型更改输入类型?

CSS3。 VueJS。动态过渡背景渐变

如何根据 Javascript 中的用户输入过滤数组?

如何根据用户选择的下拉菜单更改 PHP 中的 SQL 查询

android studio中的任何视图都会根据设备默认主题更改背景颜色