如何更改与调用关联的元素transclude()
?
在我的应用程序中,我从服务器动态加载整个 SVG 文件并显示它。我需要向加载的内容添加行为。
目前,我有这样的事情:
<div svg-canvas="urlToSVGContent"></div>
这会在 div 中加载一个 SVG 标签。这很好用,但是如果我想向 every <path>
、<circle>
等添加 ng-click 怎么办?ng-click
已经在 svg 路径上开箱即用,这只是以某种方式引用元素的问题。
我已经可以使用 transclude 创建一个指令,该指令将为每个路径运行一次:
<div svg-canvas="urlToSVGContent">
<svg-each-path>
<!-- call transclude once per path found -->
</svg-each-path>
</div>
但是在 svg-each-path 内部,虽然我对每个元素都有一个单独的范围,el
但指令的参数是没有意义的。或者它仍然指向父 div 或其他东西。
我想这样做:
<div svg-canvas="urlToSVGContent">
<svg-each-path ng-click="onPathClick()">
</svg-each-path>
</div>
这是svg-each-path
目前的样子:
function svgEachPath() {
return {
restrict: 'E',
transclude: 'element',
priority: 1000,
terminal: true,
link: link,
}
function link(scope, el, attrs, ctrl, $transclude) {
// scope.paths was set by the svg-canvas directive
scope.paths.forEach(function(path) {
var childScope = <InnerScope> scope.$new()
childScope.path = path
// how can I change "el" to point to path?
// or get the clone to be a clone of the path instead of the parent element?
$transclude(childScope, function(clone) {
})
})
}
}