- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在我的应用程序中生成 SVG 节点。现在我正在努力向节点添加兼容的 Angularjs 事件。
这个想法很简单。我正在创建一个新的文本 svg 节点,当用户单击此文本元素时,我想打开一个特定的菜单。
但正如预期的那样,“ng-click”事件未被识别。我尝试使用scope.$apply(),但没有成功。所以我想知道使用 $compile 是否正确。但是,即便如此,在以下情况下如何使用 $compile。
这是我的 View ,当用户单击创建一个新节点时。
<div ng-click="addElementToSection(data)">
...
</div>
这是我创建新节点的函数,并在其中指定文本节点的单击事件。 (这里如何使用$compile?会是解决方案吗?)
scope.addElementToSection = function(dataElement, varDefined){
...
var t = s.text(latestPositionX, yTop, dataElement.value);
t.attr({
class: 'svg-text',
'ng-click': 'openRightMenu(menu)'
});
s.select('g').append(t);
...
}
这是最终结果,但正如前面提到的,ng-click 不会触发任何事件。
<text x="20" y="875.2192993164062" ng-click="openRightMenu(menu)" class="svg-text">Test1</text>
遇到这种情况该如何处理?
更新:
我有一个使用 snapsvg 加载 SVG 文件的特定指令。
<li
ng-repeat="section in sections | filter:{visible: true}"
svg-loader="{{section.svg}}">
</li>
这里是加载 SVG 的代码片段:
var tux = Snap.load(svg, function ( loadedFragment ) {
snap.append( loadedFragment );
});
这是我正在操作的 SVG 示例。此 SVG 是从任何 SVG 工具创建的 SVG 文件加载的。
<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" version="1.1" width="1000" height="200" id="svg2">
<defs id="defs4"></defs>
<metadata id="metadata7">
<rdf:rdf>
<cc:work rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"></dc:type>
<dc:title></dc:title>
</cc:work>
</rdf:rdf>
</metadata>
<g transform="translate(0,-852.36218)" id="layer1">
<rect width="1000" height="200" x="-1000" y="855.2193" transform="scale(-1,1)" id="rect2985" style="fill:#ffb380;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"></rect>
<path d="M 101,77.000002 77.597533,65.593187 54.933655,78.404885 58.550419,52.622916 39.362247,35.027319 64.999999,30.499999 75.804935,6.813625 88.033172,29.797557 113.89916,32.75417 95.818876,51.48634 z" transform="translate(0,852.36218)" id="path2995" style="fill:#ffffff"></path>
<path d="M 728,35 714.62841,36.415519 708.21393,48.233193 702.73564,35.953477 689.51418,33.504801 699.5,24.5 l -1.75683,-13.331039 11.64987,6.714443 12.13568,-5.790359 -2.78581,13.154555 z" transform="translate(0,852.36218)" id="path2997" style="fill:#ffffff"></path>
<path d="M 259,51 230.45494,57.682466 219.77717,84.9856 204.60085,59.902628 175.33442,58.184596 194.5,36 187.09012,7.6350643 214.11142,19.007202 238.7983,3.1947398 236.33279,32.407703 z" transform="translate(0,852.36218)" id="path2999" style="fill:#ffffff"></path>
<path d="m 547,158 -46.79723,-24.29851 -46.54659,24.77525 8.64812,-52.01546 -37.94635,-36.61246 52.14205,-7.848817 23.09446,-47.402997 23.57745,47.164626 52.21951,7.315799 -37.5704,36.998159 z" transform="translate(0,852.36218)" id="path3001" style="fill:#ffffff"></path>
<path d="m 120,138 a 28,26 0 1 1 -56,0 28,26 0 1 1 56,0 z" transform="translate(0,852.36218)" id="path3005" style="fill:#ffffff"></path>
<path d="m 824,92 a 88,87 0 1 1 -176,0 88,87 0 1 1 176,0 z" transform="translate(0,852.36218)" id="path3007" style="fill:#ffffff"></path>
<rect width="179" height="43" x="185" y="118" transform="translate(0,852.36218)" id="_DRAG_rect3009" style="fill:#ffffff"></rect>
<text x="20" y="875.2192993164062" ng-click="alert(11)" class="svg-text">Test1
</text>
</g>
<desc>Created with Snap</desc>
</svg>
最佳答案
好的。本教程here给了我主要想法。
基本上这部分解决了我的问题:
angular.module('SvgMapApp').directive('svgMap', ['$compile', function ($compile) {
return {
restrict: 'A',
templateUrl: 'img/Blank_US_Map.svg',
link: function (scope, element, attrs) {
var regions = element[0].querySelectorAll('.state');
angular.forEach(regions, function (path, key) {
var regionElement = angular.element(path);
regionElement.attr("region", "");
$compile(regionElement)(scope);
})
}
}
}]);
angular.module('SvgMapApp').directive('region', ['$compile', function ($compile) {
return {
restrict: 'A',
scope: true,
link: function (scope, element, attrs) {
scope.elementId = element.attr("id");
scope.regionClick = function () {
alert(scope.elementId);
};
element.attr("ng-click", "regionClick()");
element.removeAttr("region");
$compile(element)(scope);
}
}
}]);
关于angularjs - 如何使 AngularJS 事件在 SVG 节点中兼容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27213509/
我需要将文本放在 中在一个 Div 中,在另一个 Div 中,在另一个 Div 中。所以这是它的样子: #document Change PIN
奇怪的事情发生了。 我有一个基本的 html 代码。 html,头部, body 。(因为我收到了一些反对票,这里是完整的代码) 这是我的CSS: html { backgroun
我正在尝试将 Assets 中的一组图像加载到 UICollectionview 中存在的 ImageView 中,但每当我运行应用程序时它都会显示错误。而且也没有显示图像。 我在ViewDidLoa
我需要根据带参数的 perl 脚本的输出更改一些环境变量。在 tcsh 中,我可以使用别名命令来评估 perl 脚本的输出。 tcsh: alias setsdk 'eval `/localhome/
我使用 Windows 身份验证创建了一个新的 Blazor(服务器端)应用程序,并使用 IIS Express 运行它。它将显示一条消息“Hello Domain\User!”来自右上方的以下 Ra
这是我的方法 void login(Event event);我想知道 Kotlin 中应该如何 最佳答案 在 Kotlin 中通配符运算符是 * 。它指示编译器它是未知的,但一旦知道,就不会有其他类
看下面的代码 for story in book if story.title.length < 140 - var story
我正在尝试用 C 语言学习字符串处理。我写了一个程序,它存储了一些音乐轨道,并帮助用户检查他/她想到的歌曲是否存在于存储的轨道中。这是通过要求用户输入一串字符来完成的。然后程序使用 strstr()
我正在学习 sscanf 并遇到如下格式字符串: sscanf("%[^:]:%[^*=]%*[*=]%n",a,b,&c); 我理解 %[^:] 部分意味着扫描直到遇到 ':' 并将其分配给 a。:
def char_check(x,y): if (str(x) in y or x.find(y) > -1) or (str(y) in x or y.find(x) > -1):
我有一种情况,我想将文本文件中的现有行包含到一个新 block 中。 line 1 line 2 line in block line 3 line 4 应该变成 line 1 line 2 line
我有一个新项目,我正在尝试设置 Django 调试工具栏。首先,我尝试了快速设置,它只涉及将 'debug_toolbar' 添加到我的已安装应用程序列表中。有了这个,当我转到我的根 URL 时,调试
在 Matlab 中,如果我有一个函数 f,例如签名是 f(a,b,c),我可以创建一个只有一个变量 b 的函数,它将使用固定的 a=a1 和 c=c1 调用 f: g = @(b) f(a1, b,
我不明白为什么 ForEach 中的元素之间有多余的垂直间距在 VStack 里面在 ScrollView 里面使用 GeometryReader 时渲染自定义水平分隔线。 Scrol
我想知道,是否有关于何时使用 session 和 cookie 的指南或最佳实践? 什么应该和什么不应该存储在其中?谢谢! 最佳答案 这些文档很好地了解了 session cookie 的安全问题以及
我在 scipy/numpy 中有一个 Nx3 矩阵,我想用它制作一个 3 维条形图,其中 X 轴和 Y 轴由矩阵的第一列和第二列的值、高度确定每个条形的 是矩阵中的第三列,条形的数量由 N 确定。
假设我用两种不同的方式初始化信号量 sem_init(&randomsem,0,1) sem_init(&randomsem,0,0) 现在, sem_wait(&randomsem) 在这两种情况下
我怀疑该值如何存储在“WORD”中,因为 PStr 包含实际输出。? 既然Pstr中存储的是小写到大写的字母,那么在printf中如何将其给出为“WORD”。有人可以吗?解释一下? #include
我有一个 3x3 数组: var my_array = [[0,1,2], [3,4,5], [6,7,8]]; 并想获得它的第一个 2
我意识到您可以使用如下方式轻松检查焦点: var hasFocus = true; $(window).blur(function(){ hasFocus = false; }); $(win
我是一名优秀的程序员,十分优秀!