Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript SVG.js不';t正确连接其svg元素_Javascript_Angularjs_Svg_Svg.js - Fatal编程技术网

Javascript SVG.js不';t正确连接其svg元素

Javascript SVG.js不';t正确连接其svg元素,javascript,angularjs,svg,svg.js,Javascript,Angularjs,Svg,Svg.js,我的HTML代码中有一个svg元素: 然后,在我的脚本中,我有一个调用: var drawingPad=SVG('drawingPad')。大小('100%,'100%)。fixSubPixelOffset() 使用console.log(drawingPad)和console.log($document[0].getElementById('drawingPad'))进行日志记录会产生 SVG.Doc.SVG.invent.create {parent: svg#drawingPad, _s

我的HTML代码中有一个svg元素:

然后,在我的脚本中,我有一个调用:
var drawingPad=SVG('drawingPad')。大小('100%,'100%)。fixSubPixelOffset()

使用
console.log(drawingPad)
console.log($document[0].getElementById('drawingPad'))进行日志记录会产生

SVG.Doc.SVG.invent.create {parent: svg#drawingPad, _stroke: "#000000", trans: Object, node: svg#drawingPad, type: "svg"…}


显示SVG.js似乎正确地创建了它的SVG.Doc元素,但它似乎不会影响HTML/DOM

每当*我通过
$location.path('/editor')
到达包含SVG元素的页面时,就会发生这种情况。当我直接去那里或重新加载时,一切正常

*实际上,我需要访问中间的页面来重新触发它。如果我只是返回并再次单击链接,它也可以工作


所以我被难住了。这里有人知道这里会发生什么吗?

虽然我从未专门使用过SVG.js,但可能是Angular在某些情况下可能不“了解”SVG.js。尝试将SVG呈现函数包装到
$timeout()


所以我应该做
$timeout(function(){drawingPad=SVG('drawingPad').size('100%,'100%')).fixSubPixelOffset()?只是为了确保我正确地理解你。我现在构建了这个,它似乎可以工作(需要更多的测试),但我不明白为什么。你说的“意识”是什么意思?为什么1秒的延迟甚至可以解决我的问题?如果你能帮助我理解,那将是非常感激的,否则只是谢谢你帮助我了!所以你应该接受答案;)Angular应用程序是一个自包含的世界,它使用自己的特殊过程来呈现DOM元素,例如摘要循环和
$apply()
方法。很多时候,如果不采取特殊步骤将jquery插件或其他脚本引入Angular digest循环,例如生成自定义指令和提供程序,就不能直接插入jquery插件或其他脚本。
$timeout()
方法是setTimeout的包装器,它隐式调用$scope.$apply,这意味着它在角度生命周期之外运行,但启动角度生命周期本身。Hmm。好吧,这有点道理,再次非常感谢。不过,你知道为什么有时候它会起作用吗?为什么显式调用$scope.$apply没有帮助呢?我不能肯定,但如果您使用的是cdn源代码,可能是某个脚本在另一个脚本之前加载的竞争条件。或者完全不同的事情:)你想完成什么?您正在创建一个空的SVG元素,默认情况下该元素没有颜色和边框。你希望看到什么?这是一个两年前的线程,但无论如何。目标是在浏览器中设置一个编辑器。它将加载一个图像作为背景,并允许您在图像上进行注释/绘制。js没有初始化SVG,所以东西就是不起作用。您可以看到图像,但无法进行交互。
<svg id="drawingPad"></svg>
$timeout(function(){
   //..code goes here 
});