我一直在尝试将简单的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>
`;
}
}
答案 0 :(得分:0)
由于无法从注释中获取示例,因此我想出了解决问题的另一种方法。虽然这不是我要找的确切答案,但我认为将其张贴在这里可能还是个好主意。
我的解决办法不多说了
我利用css剪切路径在SVG元素内显示图像,尤其是能够通过绑定对其进行切换。
Here is an article about clipping and masking
<img .src="${this.selectedimg}" style="clip-path: url(#myClip);" width="250" height="250">
<svg>
<defs>
<clipPath id="myClip">
<rect width="250" height="250"/>
</clipPath>
</defs>
</svg>