【发布时间】:2019-09-07 13:33:18
【问题描述】:
我已经创建了一对指令,一个来
HTML
<div>
<h3>Both</h3>
<img
sGetSrc="//via.placeholder.com/120x60?text=Good"
sFallback="//via.placeholder.com/120x60?text=Fallback"
>
</div>
GetSrcDirective [sGetSrc]
export class GetSrcDirective {
@HostBinding('src') @Input('sGetSrc') image!: string;
}
FallbackDirective[sFallback]
export class FallbackDirective {
@HostBinding('class.no-image') hasError = false;
private originalSrc!: string;
@Input('src') set src(value: string) {
if (!value) { return; }
if (value == this.originalSrc) { return; }
this.hasError = false;
this.originalSrc = value;
}
@Input() sFallback!: string;
@HostBinding('src') get currentSrc(): string {
if (this.hasError) {
return this.sFallback;
} else {
return this.originalSrc;
}
}
@HostListener('error')
failure() {
this.hasError = true;
}
}
从这段代码中,我预计它将 src 设置为 GetSrcDirective 指令中的某个值,然后 FallbackDirective 应该在发生错误时更改 img[src]。
但现在不知何故,src 被设置为 null,确切地说,我已经进行了一些调试,它按照休闲的顺序执行这些操作,从而导致将 src 设置为 null:
- 构建应用组件
- 创建 GetSrcDirective
- 将
sGetSrc设置为image - 将图像
src设置为image
- 将
- 创建后备指令
- 将调用
Input('src')设置为image - 将图像
src设置为value
- 将调用
- 完成休息
- 现在调试周期运行
- 将
sGetSrc设置为null - 将img src设置为
null - 正在加载图片...
- img[src=null] 调用错误
- FallbackDirective 做出反应并将 img[src] 更新为备用图片
我是否遗漏了任何行为,或者这是角度错误?
Stackblitz:https://stackblitz.com/edit/angular-pvqy4g
【问题讨论】:
-
您期望的行为是什么?
-
@FedericoGalfione 看看,我已经编辑了问题(就在代码之后)
-
为什么需要
GetSrcDirective?您可以绑定到 src 并实现相同的目的。那么指令冲突就没有问题了。从两个指令中操作 src 属性的操作非常棘手。 -
标签: angular