Динамически добавляйте класс css к узлу cytoscape при нажатии узла с помощью cytoscape.js

Я пытаюсь добавить класс по нажатию на узел в cytoscape.js. Вот ссылка на полный код:

https://stackblitz.com/edit/angular-kpnys1?file=src%2Fapp%2Fapp.component.ts

функция ngViewAfterInit

  cy.on("tap", "node", function(evt) {
      var node = evt.target;
      console.log("tapped " + node.id());
      cy.nodes(node).classes("foo");
    });

Tap работает нормально, но не добавляет никаких классов к узлу. Это возможно?


person Learn AspNet    schedule 09.02.2021    source источник


Ответы (1)


Для этого вам нужно будет использовать правильный метод. В настоящее время ваш код вызывает node.classes(), который удаляет все предыдущие классы узла (вы в основном перезаписываете массив классов узла).

Что вы хотите сделать: используйте node.addClass("foo") и добавьте запись в свою таблицу стилей:

{
    selector: ".foo",
    css: {
        "background-color": "green"
    }
}

Точка указывает на класс, но вы можете указать его и дальше. Если вы хотите добавить класс foo только к родительским узлам, измените .foo на :parent.foo.

Но помимо этого, ваш код действительно работал (вроде), класс присутствовал при нажатии на узел. Вот отредактированная версия вашего stackblitz, я добавил упомянутые изменения и дал одному родительскому элементу панель классов. Если вы щелкнете по родительскому элементу, узел изменит цвет фона на зеленый и запишет свои текущие классы в консоль:

stackblitz

person Stephan T.    schedule 10.02.2021
comment
Есть ли способ отключить масштабирование при прокрутке? Если у меня длинная диаграмма и есть полоса прокрутки, колесо мыши просто масштабирует диаграмму. Могу я это отключить? - person Learn AspNet; 10.02.2021
comment
Просто используйте userZoomingEnabled: false, в вашем cytoscape.js init. userZoomingEnabled: разрешено ли пользовательским событиям (например, колесу мыши, масштабированию пальцем) увеличивать масштаб графика. Эта опция не влияет на программные изменения масштабирования. - person Stephan T.; 10.02.2021
comment
Это странно, когда я уменьшаю размер своего браузера, я не вижу полос прокрутки. Можем ли мы сделать диаграмму адаптивной и динамически подстраиваться под ширину и высоту экрана? - person Learn AspNet; 11.02.2021
comment
Cytoscape.js - это просто холст, он не реагирует на изменение размера браузера. Вы инициализируете его с некоторыми начальными параметрами (определенная высота, ширина, ...), и вы можете предоставить стили css для cy div, но после инициализации холст не изменяется. Насколько я знаю, это нельзя изменить, но я могу ошибаться. В любом случае постарайтесь сохранить исходный размер - person Stephan T.; 12.02.2021
comment
Есть ли способ добавить метку вверху края, соединяющего два узла? Я не могу найти это в документации. Если да, то какой JSON для этого края? - person Learn AspNet; 15.02.2021
comment
Что вы подразумеваете под этим, что бы вы определили как этикетку поверх кромки? - person Stephan T.; 16.02.2021
comment
Например, текст на этикетке, говорящий от A до b, или любой текст на этикетке, например i.stack.imgur .com / AdK5u.png - person Learn AspNet; 16.02.2021