vue在父组件中改变子组件中的某个样式

在应用vue开发前端项目时,有时候我们需要在父组件中改变子组件的默认样式,比如你的项目中引用了第三方UI库,但是你觉得某个组件的样式你并不喜欢,那么你想改变它的默认样式,那么我们该怎么办呢?

直接上代码,先来看父组件Home.vue的代码

// 父组件Home.vue
<template>
  <div class="home">
    <h1>This is Home Component!</h1>
    <HelloWorld/>
  </div>
</template>

<script>
// @ is an alias to /src
import HelloWorld from "@/components/HelloWorld.vue";

export default {
  name: "home",
  components: {
    HelloWorld
  }
};
</script>

<style scoped>
  h1 {
    color: brown;
  }
</style>

再来看子组件HelloWorld.vue的代码:

// 子组件HelloWorld.vue
<template>
  <div class="hello">
    <h2 class="title">This is HelloWorld Component!</h2>
  </div>
</template>

<script>
export default {
  name: "HelloWorld",
};
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
  .title {
    color: #42b983;
  }
</style>

那么,我们先来看一下页面的效果:

那么,接下来,我们如果想要在Home.vue中写样式想要改变其子组件HelloWorld.vue中"This is HelloWorld!"这句话的某个样式,比如说字体颜色,那么,我们该怎么办呢?

如果,我们直接在Home.vue的style标签中直接这样写可以吗?如下:

// Home.vue组建
<template>
  <div class="home">
    <h1>This is Home Component!</h1>
    <HelloWorld/>
  </div>
</template>

<script>
// @ is an alias to /src
import HelloWorld from "@/components/HelloWorld.vue";

export default {
  name: "home",
  components: {
    HelloWorld
  }
};
</script>

<style scoped>
h1 {
  color: brown;
}
.home .title {
  color: rebeccapurple;
}
</style>

直接在Home.vue中想要控制子组件的样式,直接这样写,明显是不会生效的!

那么,我们该怎么办呢?此时,我们可以使用深度作用选择器,如果你希望组件 scoped 样式中的一个选择器能够作用得“更深”,例如影响子组件,你可以使用 >>> 操作符:

比如就上述例子而言,你可以Home.vue中scoped的样式改为下面这样:

<style scoped>
h1 {
  color: brown;
}
.home >>> .title {
  color: rebeccapurple;
}
</style>

如此,将会达到我们想要的效果拉了!看下页面效果:

可以看到,子组件的字体颜色已经改变了!

如果是有些像 Sass、less 之类的预处理器无法正确解析 >>>。这种情况下你可以使用 /deep/ 操作符取而代之——这是一个 >>> 的别名,同样可以正常工作。如下:

<style scoped lang="scss">
h1 {
  color: brown;
}
.home {
  /deep/ .title {
    color: rebeccapurple;
  }
}
</style>

 

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
HTML页面使用Vue进行单页面开发是非常方便和高效的。Vue是一个用于构建用户界面的渐进式框架,它可以帮助我们轻松地实现组件化开发和组件之间的数据传递。 首先,我们可以使用Vue提供的组件系统来封装组件。一个组件可以理解为一个独立的模块,包含了HTML结构、CSS样式和JavaScript逻辑。在使用Vue进行开发时,我们可以把页面划分为多个组件,每个组件专注于完成特定的功能。这样做的好处是提高了代码的可维护性和复用性。 其次,Vue提供了良好的机制来实现组件之间的数据传递。在组件,我们可以通过props来定义需要传递给组件的属性,组件可以使用这些属性进行渲染或者执行相关操作。同时,组件可以通过调用$emit方法触发自定义事件,并将需要传递给组件的数据作为参数传递出去。组件可以通过在组件上注册自定义事件的方式来接收组件传递过来的数据。 这种组件之间的数据传递机制非常灵活,可以满足各种需求。无论是单向数据流还是双向绑定,都可以很容易地实现。在Vue组件的数据传递是通过props和自定义事件实现的,这样的设计理念让组件之间的通信更加清晰和可控。 总之,使用Vue进行HTML页面的单页面开发可以帮助我们实现组件化开发和组件之间的数据传递。这种方式不仅提高了开发效率,还可以提升代码的可维护性和复用性。同时,Vue提供了很多方便的API和工具,可以让我们更加轻松地完成各种功能的实现。因此,Vue成为了前端开发者的首选框架之一。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值