1
我正在使用D3和Angular,我想插入一些文本元素到我的svg中,並在它們上有一個ng-click
來觸發我的控制器中的一些功能。然而,ng-click
似乎從未發生過火災。我已經使用$compile
試圖在下面的帖子提示:ng-click不能在D3中生成svg
- How do I use angularjs directives in generated d3 html?
- Angular ng-click's inside a dynamically created d3 chart are not working
這些解決方案既爲我工作。它出現在$compile
正在做的事情,因爲它附加的屬性role="button"
和tabindex="0"
我的元素,像這樣:
以前$compile
:
<svg>
<text y="30" cursor="pointer" ng-click="alert('clicked')">CLICK ME</text>
</svg>
後$compile
:
<svg>
<text y="30" cursor="pointer" ng-click="alert('clicked')" role="button" tabindex="0">CLICK ME</text>
</svg>
我想知道,如果頁面上的東西可能會竊取點擊事件?似乎角度已經添加了一個點擊處理程序的根html元素。我從來沒有注意到這個
之前,這是指令代碼,我有
.directive('clickMe', function ($compile) {
return {
restrict: 'A',
link: function (scope, element, attributes) {
var svg = d3.select(element[0])
.append('svg');
svg.append('text')
.text('CLICK ME')
.attr('y', '30')
.attr('cursor', 'pointer')
.attr('ng-click', 'alert(\'clicked\')');
var compiledSvg = $compile(svg.node())(scope);
element[0].children[0].replaceWith(compiledSvg[0]);
})
與D3的版本和A的jsfiddle角我使用的說明了這個問題:https://jsfiddle.net/soultrip/604pts5v/3/
的作品,但我認爲'警報()'將在全球範圍內提供。我想我需要在我的角度技能上工作...... –
角度模板可用的唯一東西是顯式放置在$ scope中的東西。 –