d3.js - vuejs 作用域样式不适用于 d3js

标签 d3.js vue.js

我正在尝试集成 Vue.js 和 D3.js。我注意到有时 CSS 类并不真正作用于 svg 元素。我在下面给出了 vue 组件的片段。

<template>
<div>
  <h1>Hello world</h1>
  <svg width="300" height="100" ref="barchart"></svg>
</div>
</template>
<script>
import * as d3 from "d3";

export default {
  name: "LineChart",
  mounted() {
    d3.select("h1").attr("class","red-text")
    var data = [10,20,15,30,60];
    var barHeight = 20;
    var bar = d3
      .select(this.$refs.barchart)
      .selectAll("rect")
      .data(data)
      .enter()
      .append("rect")
      .attr("class","rect")
      .attr("width", function(d) {
        return d;
      })
      .attr("height", barHeight - 1)
      .attr("transform", function(d, i) {
        return "translate(0," + i * barHeight + ")";
      });
  }
};
</script>
<style scoped>
.rect{
    fill: blue;
}
.red-text{
  color:red;
}
</style>

它的输出是:-

scoped css output

但是当我删除 scoped 属性时,代码工作正常。新输出:-

global css output

提前致谢!

最佳答案

Scoped styles 的工作原理是 vue 为 dom 元素分配一个唯一的属性,然后通过为具有该属性的元素添加额外的条件来调整样式规则。 Example in vue guide .但是,由于使用 d3 动态创建的元素不是由 vue 管理的(因为它们不是模板的一部分),所以它不是开箱即用的。解决这个问题的一种方法是使用深度选择器(例如 svg >>> .rect { ... }),它不会为子元素附加额外的唯一属性标准。

关于d3.js - vuejs 作用域样式不适用于 d3js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54408037/

相关文章:

d3.js:链接相关项目

javascript - 如何使用 d3.js 计算给定 x 的 y 值

javascript - Vuejs typescript this.$refs.<refField>.value 不存在

javascript - bootstrap-vue 表 Action onclick

spring-boot - 我无法从 vuejs 的后端获取 header

javascript - d3.js 和 d3.v3.js 的区别

javascript - D3 交错动画

javascript - Flexbox 图像库和单个图像位置

javascript - 如何从文本中过滤数字

javascript - 为什么这段代码可以计算列表中的一个项目而不是其他项目?