【发布时间】:2017-11-17 23:47:53
【问题描述】:
我是 Angular 2 的初学者,我对演示如何通过父组件访问子组件属性的教程示例有以下疑问。
进入主组件(app-component)我有这个app.component.html视图:
<div class="container">
<app-server-element
*ngFor="let serverElement of serverElements"
[srvElement]="serverElement">
</app-server-element>
</div>
</div>
</div>
它在 app.component.ts 类中定义的 serverElements 数组上进行迭代,如下所示:
serverElements = [{type: 'server', name: 'TestServer', content: 'Just a Test'}];
它正在使用元素(此时只有 1 个,但这并不重要)到 <app-server-element> 组件中,该组件是 <app-component> 的子组件。
进入我拥有的 ServerElementComponent 类:
@Component({
selector: 'app-server-element',
templateUrl: './server-element.component.html',
styleUrls: ['./server-element.component.css']
})
export class ServerElementComponent implements OnInit {
@Input('srvElement') element: {type: string, name: string, content: string};
constructor() { }
ngOnInit() {
}
}
所以,进入 app.component.html 视图我有:
<app-server-element
*ngFor="let serverElement of serverElements"
[srvElement]="serverElement">
</app-server-element>
所以据我了解 [srvElement]="serverElement" 意味着我正在访问 ServerElementComponent 子组件类的这个属性(用 @输入
@Input('srvElement') element: {type: string, name: string, content: string};
那么基本上上一次迭代到底是什么意思?
我是这样解释的:
迭代 serverElements 数组(即具有指定字段集的 Object 的通用数组,该指定字段集对应于 @Input('srvElement') 元素的字段集 在 app-server-element 子组件中定义)。然后使用当前的 serverElement 元素在使用的 组件中构建一个 @Input('srvElement') 元素(用于主视图)。
但我不确定这一点。这个 [srvElement]="serverElement" 语法的确切含义是什么?
也许我错了,但在我看来,这有点像强制转换:我有一个通用对象,它被强制转换为子组件所需的类型。我可以这样做,因为子组件中定义的类型由 @Input() 装饰器注释,因此父组件可以访问它。
这是正确的解释吗?
【问题讨论】:
标签: javascript angular typescript javascript-framework