AngularJS ng-href i svg xlink
Chciałbym uzyskać pewne informacje o użyciu atrybutów przestrzeni nazw XML z kątowym.
Problem polega na tym, że angular zawiera kilka dyrektyw do obsługi atrybutów postów, takich jak href i src, podczas analizowanych wyrażeń kątowych (w przeciwnym razie przeglądarka spróbuje załadować
{{mymodel.myimage}}jako adres URL)
https://github.com/angular/ang ... 3L329
https://github.com/angular/ang ... 3L329
Problem polega na tym, że używam angular do wypisywania svg wraz z D3, a ponieważ angular nie ma możliwości wypisania
xlink: hrefutknąłem.
Stworzyłem niestandardową dyrektywę, która wyświetla xlink: href
app.directive('ngXlinkHref', function () {
return {
priority: 99,
restrict: 'A',
link: function (scope, element, attr) {
var attrName = 'xlink:href';
attr.$observe('ngXlinkHref', function (value) {
if (!value)
return; attr.$set(attrName, value);
});
}
};
});
Pełna wersja demo:
http://plnkr.co/edit/cMhGRh
http://plnkr.co/edit/cMhGRh
Ale wygląda na to, że jeśli nie dodam ręcznie xlink: href do elementu, obraz svg nie zostanie wyświetlony.
Wszelkie sugestie, jak najlepiej obsługiwać przestrzenie nazw xml/svg wraz z angularem byłyby bardzo mile widziane.
Nie znaleziono powiązanych wyników
Zaproszony:
Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się
7 odpowiedzi
Anonimowy użytkownik
Potwierdzenie od:
Pamiętaj, że jako wartość początkową potrzebujesz również pustej wartości . - Derek Hsu
Anonimowy użytkownik
Potwierdzenie od:
Przykład:
http://jsbin.com/sigoleya/1/edit?html,js,output
http://jsbin.com/sigoleya/1/edit?html,js,output
Gdzie znalazłem rozwiązanie:
https://github.com/angular/angular.js/issues/7697
https://github.com/angular/angular.js/issues/7697
Anonimowy użytkownik
Potwierdzenie od:
znalazłem
wątek o tym
https://github.com/angular/angular.js/issues/7697
Zobacz wydanie AngularJS GitHub. Na podstawie tamtej dyskusji wydaje się, że skoro istnieje realne obejście, skutecznie wprowadzili poprawkę, przenosząc ją do zaległości.
To, co ostatecznie zadziałało dla mnie, zostało zainspirowane tym JSBin:
http://jsbin.com/sigoleya/1/edit?html,js,output
http://jsbin.com/sigoleya/1/edit?html,js,output
Oto kod, którego użyłem w moim szablonie:
Na przykład, jeśli jest ustawiona z , to Angular dynamicznie ustawi na , który prowadzi do elementu w dalszej części tej samej strony.
W drugim, drugi, kluczowy punkt jest zainstalowany pusty atrybut XLink: Href = "" dla elementu, w którym dzwonisz do Dyrektywa NGREF . Kolejność atrybutów, najwyraźniej nie ma znaczenia. Korzystanie z (jak wspomniano w odpowiedzi Derek HSU) nie działał dla mnie.
Wszystko to zakłada Angular 1.3.36.
Anonimowy użytkownik
Potwierdzenie od:
Moduł dla SVG:
Moduł wykrywania IE:
HTML:
Anonimowy użytkownik
Potwierdzenie od:
Istota jest tutaj:
https://gist.github.com/planet ... bd4a3
https://gist.github.com/planet ... bd4a3
Anonimowy użytkownik
Potwierdzenie od:
Dotyczyło to tylko iOS. Wszystkie inne przeglądarki nie dbały o porządek.
Anonimowy użytkownik
Potwierdzenie od:
Jeśli dobrze rozumiem, nieudane ładowanie elementu obrazu
uczyni ten element bezużyteczny w przyszłości
... Myślę, że jest to coś podobnego, mówi @GeekyMonkey. Jeśli system wiązań kątowych początkowo ustawił xlink: href na null, element obrazu nie będzie już działał, nawet jeśli w przyszłości będziemy mieć prawidłową wartość.
Oto rozwiązanie: Zwróć uwagę, jak zawinąłem element image wewnątrz elementu g za pomocą dyrektywy ng-if. Zapewnia to, że łączymy się z obrazem tylko wtedy, gdy dostępna jest prawidłowa wartość.
Jak powiedzieli inni, kolejność atrybutów jest również ważna. Aby upewnić się, że angularJS pozwala nam powiązać element obrazu, musimy również zaufać temu zasobowi, zrobiłem to przez filtr (jest w atrybucie xlink: href):