Я пытаюсь интегрировать A-Frame в HTML-шаблон Angular, но я не до конца понимаю, как Angular обрабатывает привязку данных.Библиотека A-Frame импортируется в polyfills.ts
.
С учетом шаблона:
<a-asset-item
[attr.id]="'cityModel'"
[attr.src]="'https://cdn.aframe.io/test-models/models/glTF-2.0/virtualcity/VC.gltf'"
(error)="error($event)"
(loaded)="assetItemLoaded($event)">
</a-asset-item>
Angular сначала заполнит дом:
<a-asset-item></a-asset-item>
Ни один изпривязки данных связаны пока .A-Frame пытается прочитать из <a-asset-item>
для id
и src
, но поскольку они еще не связаны (даже если в этом примере они жестко запрограммированы), они вызовут нулевую ошибку.
Cannot read lastIdexOf null
Если мы проигнорируем эту ошибку, мы увидим, что и id
, и src
назначены в DOM, но не в то же время, что и при создании <a-asset-item>
.
<a-asset id="cityModel" src="https://cdn.aframe.io/test-models/models/glTF-2.0/virtualcity/VC.gltf">
Это приводит к гонке.A-Frame стремится прочитать с a-asset-item
, как только он появится в DOM.Angular стремится добавить элемент в DOM, не заполняя все его атрибуты.
Есть ли способ добавить элемент и его атрибуты одновременно в DOM, сохраняя при этом преимущества привязки данных?
Дополнительное обновление:
Мне удалось преодолеть проблему немедленного связывания с:
<a-asset-item
id=""
src=""
[attr.id]="'cityModel'"
[attr.src]="'https://cdn.aframe.io/test-models/models/glTF-2.0/virtualcity/VC.gltf'"
(error)="error($event)"
(loaded)="assetItemLoaded($event)">
</a-asset-item>
В то же время, что и элемент:
id=""
src=""
После элемента:
[attr.id]="'cityModel'"
[attr.src]="'https://cdn.aframe.io/test-models/models/glTF-2.0/virtualcity/VC.gltf'"