Angular 界面元素的条件渲染

我有一个Angularlist:
点击列表元素 , 我期望在明细区域看到点击元素对应的明细:
Angular 界面元素的条件渲染
文章图片
实现方式是 , 给li元素注册click事件响应函数:
Angular 界面元素的条件渲染
文章图片
语法为:
&lth2&gtMyHeroes&lt/h2&gt&ltulclass="heroes"&gt&ltli*ngFor="leteveryheroofheroes"(click)="onSelect(everyhero)"&gt&ltspanclass="badge"&gt{{everyhero.id}}&lt/span&gt{{everyhero.name}}&lt/li&gt&lt/ul&gt在Component里实现事件响应函数的代码:
【Angular 界面元素的条件渲染】定义selectedHero属性 , 用于维护当前选中的hero信息:
Angular 界面元素的条件渲染
文章图片
在明细页面里显示selectedHero的字段值:
&lth2&gt{{selectedHero.name|uppercase}}Details&lt/h2&gt&ltdiv&gt&ltspan&gtid:&lt/span&gt{{selectedHero.id}}&lt/div&gt&ltdiv&gt&ltlabel&gtname:&ltinput[(ngModel)]="selectedHero.name"placeholder="name"/&gt&lt/label&gt&lt/div&gt然而应用不能按照期望的工作:
Angular 界面元素的条件渲染
文章图片
Chrome开发者工具console标签页里报的错误:
ERRORTypeError:Cannotreadproperty"name"ofundefined
Angular 界面元素的条件渲染
文章图片
问题的根源是 , selectedHero这个property , 在应用程序初始化时是undefined , 因为当前用户尚未点击任何一个li元素 。 解决办法是使用Angular的指令*ngIf进行条件渲染:
&ltdiv*ngIf="selectedHero"&gt&lth2&gt{{selectedHero.name|uppercase}}Details&lt/h2&gt&ltdiv&gt&ltspan&gtid:&lt/span&gt{{selectedHero.id}}&lt/div&gt&ltdiv&gt&ltlabel&gtname:&ltinput[(ngModel)]="selectedHero.name"placeholder="name"/&gt&lt/label&gt&lt/div&gt之后问题消失:
Angular 界面元素的条件渲染
文章图片


    推荐阅读