Я не могу получить доступ к свойству _groups в angular / d3js - PullRequest
0 голосов
/ 26 февраля 2019

У меня проблема с доступом к моему свойству "_groups" с помощью следующего кода:

function mouseDate(scale){ 
        var g = d3.select("#group")._groups[0][0]

        var x0 = scale.invert(d3.mouse(g)[0]);

        console.log(x0);
    }

Результат моего console.log:

Selection {_groups: Array(1), _parents: Array(1)}
  _groups: Array(1)
    0: Array(1)
      0: g#group

Когда я компилирую код, у меня естьследующая ошибка:

D:/Documents/starter-propre-angular4/src/app/pages/graphe-page/graphe.page.ts (782,32): Property '_groups' does not exist on type 'Selection<BaseType, {}, HTMLElement, any>'.

Итак, мой вопрос: есть ли решение, чтобы круглый год получать информацию в "_groups", зная, что я превращаюсь в TypeScript, используя d3js

1 Ответ

0 голосов
/ 27 февраля 2019

Свойство _groups является частным членом объекта Selection, поэтому доступ к нему не должен осуществляться напрямую.(Примечание: в JavaScript принято, что любой элемент, начинающийся с подчеркивания, обозначает закрытый элемент. См., Например, «Префикс подчеркивания для имен свойств и методов в JavaScript» ).

Поскольку свойство считается закрытым, оно не является частью открытого интерфейса и поэтому не включено в объявление типа TypeScript для модуля выбора d3.Следовательно, вы получаете ошибку компилятора, которую вы видели.Хотя это на самом деле будет работать в чистом JavaScript, компилятор TypeScript сделал именно то, что он должен делать, а именно - запретить вам делать некоторые небезопасные вещи.становится очевидным, что вы заинтересованы не в самом свойстве _groups, а в _groups[0][0], который внутренне ссылается на первый узел выбора.К счастью, метод selection.node() вернет именно этот первый элемент.Вы можете сделать это так:

function mouseDate(scale){ 
  var g = d3.select("#group").node();
  var x0 = scale.invert(d3.mouse(g)[0]);
  console.log(x0);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...