Пользовательские синглтоны элементов в Aurelia


Я думал, что при использовании инъекции зависимостей в Aurelia вы получите синглеты по умолчанию. Похоже, что это не относится к пользовательским элементам.

Допустим, у меня есть 3 пользовательских элемента с именем a, b и c. a и b являются братьями и сестрами на одной странице. c - это элемент внутри шаблона b. Я впрыскиваю c в a.

Когда я делаю это, я получаю новый экземпляр c в a. Есть ли способ сделать c синглет?

Здесь есть пример плунжера: http://plnkr.co/edit/Au80u0?p=preview

1 2

1 ответ:

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

Представьте, что вы ссылаетесь на один и тот же элемент 3 раза на странице, все они имели бы одинаковое состояние, если бы они были синглетами и не ожидали поведения пользовательского элемента. Однако вы можете создать общий класс обслуживания, который вы вводите (и является синглтоном).

То, что я сделал в своем проекте Aurelia, это создайте класс, называемый MyCustomElementMediator (заменить MyCustomElement с именем вашего элемента). Это позволяет обрабатывать состояние для компонента. Это не имеет смысла для нескольких вхождений пользовательского элемента, но если вы используете его только в одном месте, то этот подход работает.