Aframe 数据绑定不适用于A-frame标记属性
我正在用和制作一个WebVR应用程序。我从资产中加载一些静态JSON数据,并将其绑定到一个A-frame元素。下面是我的JSON数据示例Aframe 数据绑定不适用于A-frame标记属性,aframe,angular-cli,data-binding,webvr,Aframe,Angular Cli,Data Binding,Webvr,我正在用和制作一个WebVR应用程序。我从资产中加载一些静态JSON数据,并将其绑定到一个A-frame元素。下面是我的JSON数据示例 { “id”:4, “图像”:“, “位置”:“字体”, “nextScenes”:[ 3. 5. ], “热点”:[ { “id”:“obj1”, “地点”:“23251305-2400”, “旋转”:“-5-50-5”, “比例”:“150”, “标题”:“, “正文”:” }, { “id”:“obj2”, “地点”:“3145890-2175”, “旋
{
“id”:4,
“图像”:“,
“位置”:“字体”,
“nextScenes”:[
3.
5.
],
“热点”:[
{
“id”:“obj1”,
“地点”:“23251305-2400”,
“旋转”:“-5-50-5”,
“比例”:“150”,
“标题”:“,
“正文”:”
},
{
“id”:“obj2”,
“地点”:“3145890-2175”,
“旋转”:“-5-50-5”,
“比例”:“150”,
“标题”:“,
“正文”:”
}
]
}
我将用以下代码加载HTML代码中的热点
:
请注意,currentData
等于上面的JSON代码,并且currentImageSource
包含图像的位置
上面代码的问题是属性位置
、旋转
和缩放
无法绑定。渲染输出中的变量为空,但ng reflect-…
属性不为空
另外,如果我用ctrl+alt+I检查代码,对象会得到a-entity
标记的默认值
更新一个:属性id
的数据绑定工作正常
更新二:在这里,您可以在我的浏览器中看到输出:
退出虚拟现实
你能在我的代码中找到错误吗
提前感谢不要担心在DOM检查器中看到什么。您正在绑定的内容仍然会影响场景本身,对吗?如果是这样的话,我想这会回答: 出于性能原因,A-Frame不会使用组件数据更新DOM。使用调试组件启用组件到DOM的序列化 默认情况下,出于性能原因,A-Frame不会使用组件数据更新DOM。如果打开浏览器的DOM inspector,我们将看到许多实体将只显示组件名称:
组件数据存储在内部。更新DOM需要CPU时间将内部存储的组件数据转换为字符串。但是,当我们希望看到DOM更新以进行调试时,可以将调试组件附加到场景。组件将在尝试序列化到DOM之前检查调试组件是否已启用。然后,我们将能够在DOM中查看组件数据:
确保此组件在生产中未处于活动状态
不要担心在DOM检查器中看到什么。您正在绑定的内容仍然会影响场景本身,对吗?如果是这样的话,我想这会回答: 出于性能原因,A-Frame不会使用组件数据更新DOM。使用调试组件启用组件到DOM的序列化 默认情况下,出于性能原因,A-Frame不会使用组件数据更新DOM。如果打开浏览器的DOM inspector,我们将看到许多实体将只显示组件名称:
组件数据存储在内部。更新DOM需要CPU时间将内部存储的组件数据转换为字符串。但是,当我们希望看到DOM更新以进行调试时,可以将调试组件附加到场景。组件将在尝试序列化到DOM之前检查调试组件是否已启用。然后,我们将能够在DOM中查看组件数据:
确保此组件在生产中未处于活动状态
在尝试了一种变通方法之后,我找到了一种有效的解决方案。这段代码的问题是它没有使用数据绑定,我认为它的性能不如数据绑定,但A-frame不支持它 在这里,您可以找到我在typescript代码中添加的代码:
ngAfterViewInit():void{
for(设i:number=this.currentData.hotspots.length;i--;){
设spot:any=this.currentData.hotspots[i],
el:any=document.getElementById(spot.id);
el.setAttribute(“位置”,点位置);
el.setAttribute(“旋转”,点旋转);
el.setAttribute(“比例”,点比例);
}
}
如果我给每个a-entity
-标记一个唯一的ID,则此代码有效。我的组件的HTML代码不变,但可以使用此代码
在尝试解决方法后,我找到了一个有效的解决方案。这段代码的问题是它没有使用数据绑定,我认为它的性能不如数据绑定,但A-frame不支持它 在这里,您可以找到我在typescript代码中添加的代码:
ngAfterViewInit():void{
for(设i:number=this.currentData.hotspots.length;i--;){
设spot:any=this.currentData.hotspots[i],
el:any=document.getElementById(spot.id);
el.setAttribute(“位置”,点位置);
el.setAttribute(“旋转”,点旋转);
el.setAttribute(“比例”,点比例);
}
}
如果我给每个a-entity
-标记一个唯一的ID,则此代码有效。我的组件的HTML代码不变,但可以使用此代码
给出了角度数据绑定不起作用的原因 使用角度单向数据绑定,实际上是在设置a-frame实体的属性。然而,在现实中,不存在这样的属性。这些实际上是这些元素的属性。因此,您可以通过domapi进行操作 但是,从安全角度来看,不建议使用domapi。但这也不是必须的 做某事
<a-entity *ngFor="let spot of currentData.hotspots; let i = index" [id]="spot.id"
[attr.position]="spot.location" [attr.rotation]="spot.rotation" [attr.scale]="spot.scale"
visible="true" mixin="null" color="pink"
text="zOffset:0;value:S;height:100;width:100;align:center"></a-entity>
<a-entity *ngFor="let spot of currentData.hotspots"
[attr.position]="spot.location" [attr.rotation]="spot.rotation"
[attr.scale]="spot.scale"
...