Я долго боролся с этим, многие старые посты решают эту проблему, но неполными, косвенными или устаревшими способами.Это такая общая проблема, общее решение было бы идеальным.Я не могу / не должен изменять SVG.У svg есть идентификатор, и у всех различных групп есть идентификаторы, с которыми мне нужно взаимодействовать.
Проблема в том, что я не могу назначить событие загрузки для самого элемента svg, потому что он еще не загружен, когда мой контроллер работает;И если я назначу событие on load родительскому тегу embed, то я не смогу получить доступ к элементам через getElementByID, потому что они еще не загружены.
View:
<div style="width:1000px" ng-controller="Controller">
<embed id="svgObject" width="100%" height="100%" ng-src="{{modelSVG}}" type="image/svg+xml"></embed>
</div>
Контроллер:
.controller('HomeController',['BaseController','$scope','$location',function (BaseController,scope,location) {
scope.modelSVG = location.protocol() + '://' + location.host() + '/svg/pic.svg';
var svgObject = document.getElementById("svgObject");
svgObject.addEventListener('load', function(){
var svgDocument = svgObject.contentDocument;
**Do lots of stuff to EACH and every shape loadeded (e.g. show/hide, set hover/click events, etc
})
}])
Еще одна попытка получить настоящий документ svg
var svgDocument = svgObject.contentDocument ? svgObject.contentDocument : svgObject.contentWindow.document;
Не могу поверить, что это так сложно.