Привязка Лит-Элемента к изображению SVG. TypeError: Невозможно прочитать свойство 'split' из null - PullRequest
0 голосов
/ 20 марта 2019

Я пытался привязать простой 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, которое было указано в комментариях к этому вопросу, я обновил свойответ:

enter image description here

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>

    `;
}
}

1 Ответ

0 голосов
/ 31 марта 2019

Поскольку я не смог получить пример из комментариев к работе, я придумал другое решение моей проблемы. Хотя это не точный ответ, который я искал, я решил, что опубликовать его здесь может быть хорошей идеей.

Без лишних слов мое решение:
Я использовал css clip-path, чтобы отобразить изображение внутри моего SVG-элемента и, в частности, иметь возможность переключать его с помощью привязок.

Вот статья об отсечении и маскировке

<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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...