gpt4 book ai didi

javascript - 单独的指令范围 Angular2

转载 作者:行者123 更新时间:2023-12-03 06:13:31 27 4
gpt4 key购买 nike

我尝试在 SO 上查看一些类似的问题,但找不到解决我的问题的方法。

有一个倒计时@Directive(),它接受几个输入并倒计时。倒计时部分有效,但我遇到了一个问题,即所有选择器在进入下一个倒计时之前都运行/发出相同的数字。我如何让它们使用自己的参数单独倒计时并同时运行?

Plunkr

app.component.ts 中的 run() 代码

run() {
var _this = this;
clearInterval(_this._timer);
var counting = 0;
var incrementFactor = 0;
var increment = 1;

if (!isNaN(_this._duration) && !isNaN(_this._step) && !isNaN(_this._countFrom) && !isNaN(_this._countTo)) {
counting = Math.round(_this._countFrom);
incrementFactor = Math.round(Math.abs(_this._countTo - _this._countFrom) / ((_this._duration * 1000) / _this._step));
increment = (incrementFactor < 1) ? 1 : incrementFactor

_this.countToChange.emit(counting);

_this._timer = setInterval(function() {
if (_this._countTo < _this._countFrom) {
if (counting <= _this._countTo) {
clearInterval(_this._timer);
_this.countToChange.emit(_this._countTo);
} else {
_this.countToChange.emit(counting);
counting -= increment;
}
}
}, _this._step);
}
}

最佳答案

问题出在您的组件上。您对所有 3 个指令使用了相同的变量“计数”。

如果您使用 3 个不同的组件级别变量,如下所示,它会起作用:

这是您的 plunk 的更新版本 https://plnkr.co/edit/PrwF8gYrl5AYCB0XcUsg?p=preview

@Component({
selector: 'my-app',
template: `
<countDown [step]="100" [countFrom]="100" [countTo]=0 [duration]="2" (countToChange)="count1 = $event">{{ count1 }}</countDown>
<countDown [step]="100" [countFrom]="1000" [countTo]=0 [duration]="4" (countToChange)="count2 = $event">{{ count2 }}</countDown>
<countDown [step]="100" [countFrom]="10000" [countTo]=0 [duration]="20" (countToChange)="count3 = $event">{{ count3 }}</countDown>
`,
directives: [countDown]
})
export class AppComponent {
public count1:number;
public count2:number;
public count3:number;
}

关于javascript - 单独的指令范围 Angular2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39212722/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com