#javascript #jquery #angular #typescript #gsap
#javascript #jquery #угловой #typescript #gsap
Вопрос:
Я использую анимацию зеленого носка, в настоящее время я создаю прогресс загрузки и добавляю счетчик процентов, пример:-https://codepen.io/linxlatham/pen/aWJaXp
Я использую эту ссылку для справки, чтобы показать счетчик процентов, но используя текстовый метод, показать неопределенное
HTML:
<div class="loader">
<div class="loader-border">
<div class="progress" [ngStyle]="{'width': '0%'}">
<div class="progress-text">
<p id="count"><p>
</div>
</div>
</div>
</div>
код:
progres: any;
width: string;
count: any;
tween: any;
newPercent: any;
constructor() {}
ngOnInit() {
this.progres = document.getElementsByClassName('progress')[0];
this.count = document.getElementById('count');
this.tween = new TweenLite(this.progres, 10, {
width: '100%',
ease: Linear.easeNone,
onUpdate: () => {
this.newPercent = (this.tween.progress() * 100).toFixed();
console.log(this.count.innerHTML = this.newPercent '%');
console.log('-----' this.count.text()); //show undefined
}
});
}
но он отлично работает с использованием innerHTML, пожалуйста, скажите, делаю ли я что-то неправильно.
Комментарии:
1. @Sajeetharan this.count является объектом html
2. text() — это метод jQuery.
3. @Ritesh является ли innerHTML хорошим вариантом
4. ДА. Но я бы рекомендовал вам не запрашивать DOM напрямую, а делать это угловым способом. Если вы хотите, я могу опубликовать это в качестве ответа
5. пожалуйста, добавьте @Ritesh
Ответ №1:
Запрашивать DOM в Angular не рекомендуется. Вам нужно сделать это угловым способом.
Сначала вам нужно указать ссылочную переменную пользовательского шаблона, чтобы вы могли ссылаться на них в своем компоненте. Ссылочные переменные шаблона имеют префикс #.
<div class="loader">
<div class="loader-border">
<div class="progress" [ngStyle]="{'width': '0%'}" #progress>
<div class="progress-text">
<p id="count" #count><p>
</div>
</div>
</div>
</div>
Теперь в вашем компоненте вам нужно импортировать ViewChild и ElementRef и использовать их, как показано ниже:
progres: any;
width: string;
count: any;
tween: any;
newPercent: any;
@ViewChild('count') count: ElementRef;
@ViewChild('progress') count: ElementRef;
constructor() {}
ngOnInit() {
this.progres = this.progress.nativeElement;
this.count = this.count.nativeElement;
this.tween = new TweenLite(this.progres, 10, {
width: '100%',
ease: Linear.easeNone,
onUpdate: () => {
this.newPercent = (this.tween.progress() * 100).toFixed();
this.count.nativeElement.innerHTML = this.newPercent '%');
}
});
}