如何使用传递的值设置子组件的样式?

Posted

技术标签:

【中文标题】如何使用传递的值设置子组件的样式?【英文标题】:How to style child component with passed values? 【发布时间】:2018-05-31 00:41:09 【问题描述】:

我想发送设置子组件样式的值。实际上,一个孩子将这些样式注册为用户输入并将它们发送到主组件,然后主组件将这些参数传递给另一个孩子 - 我不确定这是否是正确的方法,因为我仍在学习,但这就是我所拥有的远。

接收到发射数据后的父组件具有这些样式。

data() 
    return 
            active: [
                [600,'20px','Roboto'], // h1
                [400,'16px','Open Sans'] // p
            ]
        

父模板(将值传递给子模板)

    <Content :active="active"></Content >

孩子

export default 
  props: ['active'],
  data () 
    return 
      h1: 'Some title',
      p: 'Lorem ipsum dolor sit amet'
    
  

子模板

<template>
    <div>
        <h1> h1 </h1>
        <p> p </p>
    </div>
</template>

如何在子模板中使用传递的值设置标签的样式?这应该是结果......还是有更好的最终解决方案?稍后可能会添加更多内容,例如行高和边距。

 <h1 style="font-weight: 600 font-size: 20px; font-family: Roboto">

这是docs

<div v-bind:style=" display: ['-webkit-box', '-ms-flexbox', 'flex'] "></div>

但我不确定如何传递值?这会引发致命错误:D

<div v-bind:style=" font-family: active[0][2] "></div>

【问题讨论】:

【参考方案1】:

最好的方法是创建在子元素中计算的样式:

props: ['active'],
computed: 
    styles()
      return  
        //note the camelCase instead of '-' 
        'fontFamily': this.active[0][2],
         .....
      
    

然后在模板中:

<div :style="styles"></div>

【讨论】:

这在我手动设置计算样式时有效,如果我像你那样做我得到“渲染错误:“ReferenceError:未定义活动”。当我在模板中回显值时 - 活动[0 ][2] 它正确显示了值,所以我不认为这是错误的。也许计算属性会比传递值更早地尝试计算? @IvanTopić 尝试使用this.active[0][2]active[0][2] 在模板中有效,因为不需要使用 this 谢谢,它有效。 @fatman,您可以在答案中更改它吗?

以上是关于如何使用传递的值设置子组件的样式?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 React 中的 CSS 模块将多个类动态传递给子组件

将样式描述传递给子组件

如何在 nuxt.js 上从子组件获取父组件的值?

我应该如何指定样式组件 React Native 组件的子类型?

Vue父组件向子组件传递一个动态的值,子组件如何保持实时更新实时更新?

如何通过将 SVG 作为 prop 传递来使用 React 样式组件设置 SVG 样式?