Angular 角度变量未刷新(未在模板中正确显示)
有两个组件:Angular 角度变量未刷新(未在模板中正确显示),angular,data-binding,ionic2,angular-services,angular-components,Angular,Data Binding,Ionic2,Angular Services,Angular Components,有两个组件:图形,节点 和1个服务:nodesmanager nodesmanager被注入到graph 当图形组件检测到鼠标点击事件时,注入的服务节点管理器通过调用函数AddNode,调用n.setPos(22,44),并将n添加到节点列表节点 setPos应更改节点的两个变量:posX和posY 然后模板node.html应该“echo”posX:{{posX} 但问题是{{posX}没有显示在setPos之后更改的posX值,它没有显示任何内容。它认为posX是未定义的。 nodesman
图形
,节点
和1个服务:nodesmanager
nodesmanager
被注入到graph
当图形
组件检测到鼠标点击事件时,注入的服务节点管理器
通过调用函数AddNode
,调用n.setPos(22,44)
,并将n
添加到节点列表节点
setPos
应更改节点的两个变量:posX
和posY
然后模板node.html
应该“echo”posX:{{posX}
但问题是{{posX}
没有显示在setPos
之后更改的posX值,它没有显示任何内容。它认为posX是未定义的。
nodesmanager.service.ts:
node.ts:
node.html(模板):
graph.html(模板):
从NodeComponent类中删除SetPos
将NodeManager服务更改为仅保留数据
public nodes: any[] = [] ;
constructor() { }
AddNode (x: number, y: number): void {
this.nodes.push ({x, y});
}
更改模板
<div class="graph" (click)="MouseClicked($event)">
<div *ngIf="nodesManager.nodes">
<div *ngFor="let node of nodesManager.nodes">
<app-node [posX]="node.x" [posy]="node.y"></app-node>
</div>
</div>
</div>
这并没有解决问题。谢谢在SetPos方法中添加一个console.log来查看它得到了什么。当你说你没有得到任何东西时,你是否至少在输出中看到了“p:”?另外,如果这是NodeComponent类的完整签名,我觉得你可以通过使用一个构造函数将这两个属性定义为public来简化它。然后可以删除SetPos方法和两个输入。1-是,在浏览器中打印字母“p”。2-在setPos
函数中执行console.log(this.posX)
,在控制台中打印posX
(22)的正确值。但是问题仍然存在于tempale中,它只打印“p:”就像1中所说的那样,让NodeComponent
的构造函数获取这两个属性,在graph.html
中使用其模板创建新的NodeComponent
时会产生问题(执行
)。我似乎不知道如何创建一个在构造函数中使用参数的组件,使用它的模板。
<div>
p: {{posX}}
</div>
constructor(public nodesManager: NodesManagerService) { }
ngOnInit() {}
MouseClicked (event: MouseEvent) : void {
this.nodesManager.AddNode(event.clientX, event.clientY);
}
<div class="graph" (click) = "MouseClicked($event)">
<div *ngIf="nodesManager.nodes">
<div *ngFor = "let node of nodesManager.nodes">
<app-node></app-node>
</div>
</div>
</div>
public nodes: any[] = [] ;
constructor() { }
AddNode (x: number, y: number): void {
this.nodes.push ({x, y});
}
<div class="graph" (click)="MouseClicked($event)">
<div *ngIf="nodesManager.nodes">
<div *ngFor="let node of nodesManager.nodes">
<app-node [posX]="node.x" [posy]="node.y"></app-node>
</div>
</div>
</div>