我创建了一个属性指令ImageSpinloaderDirective
来有条件地更改用户个人资料图片的外观,具体取决于是否有图片以及是否已加载:
src
属性的URL(404等),则为默认值
图像应该显示我的方法是收听load
中的DOM事件error
和ImageSpinloaderDirective
,并设置src
属性和img-loading
类因此<img>
元素。 img-loading
类将图像opacitiy设置为0并使用动画gif作为背景图像。
现在我想在每次显示不同的用户时从父组件(isLoading
)更改指令的UserDetailsComponent
字段。我认为在该组件中使用@ViewChild
注释将是实现这一目标的正确选择。然而,绑定似乎由于某种原因而失败,因为UserDetailsComponent
的{{1}}始终未定义。
是否可以使用带有imageSpinloaderDirective
注释的属性指令?有没有更好的/替代方法将属性指令绑定到组件?或者这种方法是完全错误的,应该以不同的方式实施吗?
用户-details.component.ts
@ViewChild
用户-details.html
Component({
moduleId: module.id,
selector: 'user-details',
templateUrl: 'user-details.html',
styleUrls: [
'./../grid/grid-item-details.css',
'./../grid/grid.css'
],
animations: [fadeInOut]
})
export class UserDetailsComponent extends GridItemDetailsComponent<User>
{
public user: User;
public profileImageUrl: string;
@ViewChild(ImageSpinloaderDirective)
public imageSpinloaderDirective: ImageSpinloaderDirective;
public loadDetails(item: User): void
{
this.user = item;
this.imageSpinloaderDirective.isLoading = true;
this.profileImageUrl = `${this.configService.config.profileApiUrl}/image/${item.id}`;
}
}
图片-spinloader.directive.ts
<div class="row">
<div class="col-lg-12">
<div class="img-loader">
<img id="foo" imgspinloader
class="img-rounded"
src="{{profileImageUrl}}">
</div>
</div>
</div>