vue2组件嵌套的时候什么情况下scoped会失效以及怎么解决

这里用到了一个子组件

组件里边也很简单就有一个div

只是呢它的class也叫home

外层的容器里也有一个class=home

然后分别在这两个页面里

都定义了(各自的)home的背景颜色

大家看!按说的话呢

如果他用scoped来隔离这个样式

他应该是各有各的颜色对吧

我们来看一下(子组架是红色)

但是呢大家看

子组架的样式就没有生效

为什么会这样呢

原因是啊

他这个子组件

把这class写在了

这个template里边的第一层的DIV里边

这个DIY会有什么问题呢大家看

我们检查一下这个元素

看这个div里面有两个这个唯一的标识

两个唯一标识意味着什么呢

我们再来看一下它生成的home样式

在这里比如说这两个组件的HOME

都能命中这个子组件

也就意味着我后写的(口误:后生成)这个home就会生效

通常来说父组件的样式是在后面的

所以子组件的就被覆盖掉了

所以解决这个问题呢有两个方案

那第一个方案呢就是

既然他会把第一层生成两个

那个唯一标识

那我们就再套一个div(在外层)

让他把这个

生成两个的标识放在这一层上

这样的话呢就只有

子组件的这个.home可以命中这个子组件

我们来看一下

这样就行了

我们再来看下生成的

看看外层的这个有两个标识

这个772是父组件的

然后呢这个C40是子组件的

然后再往下看

这个子组架就只有一个唯一标识了

这样的话呢就只有那一个.home能命中他

那第二个方案呢

我先把这些回复一下哈

如果这块不改怎么处理呢

我们就要从这个权重上来考虑

来搜一下

既然他的位置在前面

那我们就想办法提高他这个权重值

现在他权重值是0-2-0对吧

一个类样式一个属性选择器

关于权重的问题

大家可以看这期视频啊

那我们怎么提高他的权重呢

我们可以在这再写一个点home

注意不要有空格

.home 连着再写一个.home

这样的话呢

大家看

虽然他在前面但是他的权重值高了

变成0-3-0了

两个类样式一个属性选择器

所以呢这子组件就可以应用上了

最后更新于