Angular: لا تظهر الأنماط في مكون D3.js في الزاوية 2

تم إنشاؤها على ٢٥ مارس ٢٠١٦  ·  3تعليقات  ·  مصدر: angular/angular

أنا أستخدم Angular 2 و D3.js. أريد أن أظهر مستطيل أحمر.

إنه يعمل فقط إذا وضعت أنماطًا في ملف style.css . تحقق من هذا المخطط

عندما أضع الأنماط الخاصة بي في المكون styles: [] ، فإنه لا يعمل. تحقق من هذا المخطط

الرجوع إلى Stack Overflow .

import {Component} from 'angular2/core'
@Component({
  selector: 'my-app',
  providers: [],
   styles: [`
    /*this does not work*/
    .bar {
      fill: red;
    }
  `],
  template: `
    <div>
      <svg class="chart"></svg>
    </div>
  `,
  directives: []
})
export class App {
  constructor() {}

  ngOnInit() {
    this.draw();
  }

  draw() {
    let data = [{name: 'A', value: 1}];
    let width = 400, height = 200;

    let x = d3.scale.ordinal().rangeRoundBands([0, width]);
    let y = d3.scale.linear().range([height, 0]);

    let chart = d3.select(".chart")
      .attr("width", width)
      .attr("height", height)
      .append("g");

    x.domain(data.map(function(d) { return d.name; }));
    y.domain([0, d3.max(data, function(d) { return d.value; })]);

    chart.selectAll(".bar")
      .data(data)
      .enter().append("rect")
      .attr("class", "bar")
      .attr("x", function(d) { return x(d.name); })
      .attr("y", function(d) { return y(d.value); })
      .attr("height", function(d) { return height - y(d.value); })
      .attr("width", x.rangeBand());
  }
}

التعليق الأكثر فائدة

هذا حسب التصميم. يضيف Angular أسماء فئات فريدة للمكونات ويعيد كتابة الأنماط المضافة لتطبيقها فقط على المكونات التي تمت إضافتها إليها.

ينشئ D3 HTML ديناميكيًا بدون معرفة Angulars ولا يستطيع Angular تطبيق الفئات لجعل الأنماط تنطبق على HTML الذي تم إنشاؤه.

إذا قمت بإضافة الأنماط في ملف HTML الخاص بنقطة الإدخال ، فلن يقوم Angular أيضًا بإعادة كتابة الأنماط ولن يتم تفعيل الفئات المساعدة المضافة.

مع encapsulation: ViewEncapsulation.None لا يقوم Angular بإعادة الكتابة هذه ، وبالتالي فإن النتيجة مشابهة لإضافة HTML إلى index.html .

بدلاً من ذلك ، يمكنك استخدام تركيبات CSS الثاقبة للظلال التي تم تقديمها مؤخرًا >>> ، /deep/ و ::shadow . راجع أيضًا http://stackoverflow.com/a/36225709/217408

ال 3 كومينتر

هذا حسب التصميم. يضيف Angular أسماء فئات فريدة للمكونات ويعيد كتابة الأنماط المضافة لتطبيقها فقط على المكونات التي تمت إضافتها إليها.

ينشئ D3 HTML ديناميكيًا بدون معرفة Angulars ولا يستطيع Angular تطبيق الفئات لجعل الأنماط تنطبق على HTML الذي تم إنشاؤه.

إذا قمت بإضافة الأنماط في ملف HTML الخاص بنقطة الإدخال ، فلن يقوم Angular أيضًا بإعادة كتابة الأنماط ولن يتم تفعيل الفئات المساعدة المضافة.

مع encapsulation: ViewEncapsulation.None لا يقوم Angular بإعادة الكتابة هذه ، وبالتالي فإن النتيجة مشابهة لإضافة HTML إلى index.html .

بدلاً من ذلك ، يمكنك استخدام تركيبات CSS الثاقبة للظلال التي تم تقديمها مؤخرًا >>> ، /deep/ و ::shadow . راجع أيضًا http://stackoverflow.com/a/36225709/217408

zoechi شكرا جزيلا لك !! إنها تعمل على أكمل وجه!

للأشخاص الآخرين ، لمزيد من التفاصيل حول حل zoechi ، يرجى التحقق هنا

تم قفل هذه المشكلة تلقائيًا بسبب عدم النشاط.
يرجى تقديم مشكلة جديدة إذا كنت تواجه مشكلة مشابهة أو ذات صلة.

اقرأ المزيد حول سياسة قفل المحادثة التلقائي .

_تم تنفيذ هذا الإجراء تلقائيًا بواسطة روبوت.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات