Я пытался привязать простой URL (строку) к тегу изображения внутри элемента svg.
Но я получаю следующее сообщение об ошибке: TypeError: Cannot read property 'split' of null
и в браузере не отображается изображение.
Изображение, а также переплет работают нормально и без ошибок внутри обычного тега <img>
или жестко закодированы в элементе <image/>
.
Пример с SVG:
import { LitElement, svg } from 'lit-element';
class AppDevice extends LitElement {
static get properties() {
return {
selectedImage: {
type: String
}
};
}
constructor() {
super();
this.selectedImage = 'https://mdn.mozillademos.org/files/6457/mdn_logo_only_color.png';
}
render() {
return svg`
<svg width="600px" height="600px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<image xlink:href="${this.selectedImage}" id="canvas" x="176.32" y="145.932" width="252.068" height="252.068"/>
<!-- Works -->
<!-- <image xlink:href="https://mdn.mozillademos.org/files/6457/mdn_logo_only_color.png" id="canvas" x="176.32" y="145.932" width="252.068" height="252.068"/> -->
</svg>
`;
}
}
Пример с обходным решением:
После прочтения обсуждения github, которое было указано в комментариях к этому вопросу, я обновил свойответ:
const namespaced = directive((namespace, value) => (part) => {
part.committer.element.setAttributeNS(namespace, part.committer.name, value);
});
const xlinkNamespace = 'https://mdn.mozillademos.org/files/6457/mdn_logo_only_color.png';
import { LitElement, html } from 'lit-element';
class AppDevice extends LitElement {
static get properties() {
return {
};
}
constructor() {
super();
}
render() {
return html`
<svg width="600px" height="600px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<image xlink:href="${namespaced(xlinkNamespace, 'something')}" id="canvas" x="176.32" y="145.932" width="252.068" height="252.068"/>
</svg>
`;
}
}