Ionic2 + Angular2 - 带 ion-icon 星的动态速率值
Ionic2 + Angular2 - dynamic rate value with ion-icon star
我正在尝试构建一个从 0 到 5 星(及其中间值,如 x.5 [示例 4.5])的简单动态速率,它从 javascript.[=13= 接收值]
我用 *ngFor 寻找了一些东西,但我不明白它是如何工作的。有人可以解释/帮助我吗?
如果有帮助,对于 ionic,我们有 3 种可用的星星:
<ion-icon name="star"></ion-icon>
<ion-icon name="star-half"></ion-icon>
<ion-icon name="star-outline"></ion-icon>
例如,如果我从服务器收到一个价值率 = 3.5,它呈现:
<ion-icon name="star"></ion-icon>
<ion-icon name="star"></ion-icon>
<ion-icon name="star"></ion-icon>
<ion-icon name="star-half"></ion-icon>
<ion-icon name="star-outline"></ion-icon>
我正在使用 javascript,没有打字稿。
非常感谢:)
p.s。不知道这个标题好不好,欢迎大家指教:)
如果你有一个像
这样的数组
value = ['star', 'star', 'star', 'star-half', 'star-outline'];
您可以使用 ngFor
呈现您的 HTML 喜欢
<ion-icon *ngFor="let icon of icons" [name]="icon"></ion-icon>
或取决于 name
是什么(属性 或属性)
<ion-icon *ngFor="let icon of icons" name="{{icon}}"></ion-icon>
这是一种方法:
<ion-item>
<ion-icon *ngIf="myRating>=1" name="star"></ion-icon>
<ion-icon *ngIf="myRating>=2" name="star"></ion-icon>
<ion-icon *ngIf="myRating>=3" name="star"></ion-icon>
<ion-icon *ngIf="myRating>=4" name="star"></ion-icon>
<ion-icon *ngIf="myRating>=5" name="star"></ion-icon>
<ion-icon *ngIf="myRating%1!=0" name="star-half"></ion-icon>
<ion-icon *ngIf="myRating==0" name="star-outline"></ion-icon>
<ion-icon *ngIf="myRating<=1" name="star-outline"></ion-icon>
<ion-icon *ngIf="myRating<=2" name="star-outline"></ion-icon>
<ion-icon *ngIf="myRating<=3" name="star-outline"></ion-icon>
<ion-icon *ngIf="myRating<=4" name="star-outline"></ion-icon>
</ion-item>
它在 HTML 中占用更多 space,但不需要任何额外的 javascript。这里,myRating
是星级值。我测试了所有 11 个可能的值。
另一种方法是创建一个带有 switch case 的函数,或者如果 return 图标的类型,以清理代码 html。
html:
<Ion-item>
<Ion-icon [name]="validate(myRating)"> </ion-icon>
</Ion-item>
函数:
Validate(e:string): string {
Let res;
if (e> 1){
res="star";
}
else {
res="star-outline";
}
Return result;
}
我已经使用你们提供的提示找到了这个解决方案:
function printRating (rating) {
let max_rate = 5;
let rounded_rating = Math.round(rating);
let array_stars = new Array(max_rate);
array_stars.fill('star-outline');
for(let i=0; i < rounded_rating; i++) {
array_stars[i] = 'star';
if(i === rounded_rating - 1 && rating % 1 !== 0) {
array_stars[i] = 'star-half';
}
}
return array_stars;
}
在我的组件中,我将结果数组关联到一个变量
this.stars = this.printRating(this.seller.rating);
最后在我根据结果数组打印的视图中
<ion-icon *ngFor="let star of stars" name="{{star}}"></ion-icon>
希望这对某人有所帮助!
我正在尝试构建一个从 0 到 5 星(及其中间值,如 x.5 [示例 4.5])的简单动态速率,它从 javascript.[=13= 接收值]
我用 *ngFor 寻找了一些东西,但我不明白它是如何工作的。有人可以解释/帮助我吗?
如果有帮助,对于 ionic,我们有 3 种可用的星星:
<ion-icon name="star"></ion-icon>
<ion-icon name="star-half"></ion-icon>
<ion-icon name="star-outline"></ion-icon>
例如,如果我从服务器收到一个价值率 = 3.5,它呈现:
<ion-icon name="star"></ion-icon>
<ion-icon name="star"></ion-icon>
<ion-icon name="star"></ion-icon>
<ion-icon name="star-half"></ion-icon>
<ion-icon name="star-outline"></ion-icon>
我正在使用 javascript,没有打字稿。
非常感谢:)
p.s。不知道这个标题好不好,欢迎大家指教:)
如果你有一个像
这样的数组value = ['star', 'star', 'star', 'star-half', 'star-outline'];
您可以使用 ngFor
呈现您的 HTML 喜欢
<ion-icon *ngFor="let icon of icons" [name]="icon"></ion-icon>
或取决于 name
是什么(属性 或属性)
<ion-icon *ngFor="let icon of icons" name="{{icon}}"></ion-icon>
这是一种方法:
<ion-item>
<ion-icon *ngIf="myRating>=1" name="star"></ion-icon>
<ion-icon *ngIf="myRating>=2" name="star"></ion-icon>
<ion-icon *ngIf="myRating>=3" name="star"></ion-icon>
<ion-icon *ngIf="myRating>=4" name="star"></ion-icon>
<ion-icon *ngIf="myRating>=5" name="star"></ion-icon>
<ion-icon *ngIf="myRating%1!=0" name="star-half"></ion-icon>
<ion-icon *ngIf="myRating==0" name="star-outline"></ion-icon>
<ion-icon *ngIf="myRating<=1" name="star-outline"></ion-icon>
<ion-icon *ngIf="myRating<=2" name="star-outline"></ion-icon>
<ion-icon *ngIf="myRating<=3" name="star-outline"></ion-icon>
<ion-icon *ngIf="myRating<=4" name="star-outline"></ion-icon>
</ion-item>
它在 HTML 中占用更多 space,但不需要任何额外的 javascript。这里,myRating
是星级值。我测试了所有 11 个可能的值。
另一种方法是创建一个带有 switch case 的函数,或者如果 return 图标的类型,以清理代码 html。
html:
<Ion-item>
<Ion-icon [name]="validate(myRating)"> </ion-icon>
</Ion-item>
函数:
Validate(e:string): string {
Let res;
if (e> 1){
res="star";
}
else {
res="star-outline";
}
Return result;
}
我已经使用你们提供的提示找到了这个解决方案:
function printRating (rating) {
let max_rate = 5;
let rounded_rating = Math.round(rating);
let array_stars = new Array(max_rate);
array_stars.fill('star-outline');
for(let i=0; i < rounded_rating; i++) {
array_stars[i] = 'star';
if(i === rounded_rating - 1 && rating % 1 !== 0) {
array_stars[i] = 'star-half';
}
}
return array_stars;
}
在我的组件中,我将结果数组关联到一个变量
this.stars = this.printRating(this.seller.rating);
最后在我根据结果数组打印的视图中
<ion-icon *ngFor="let star of stars" name="{{star}}"></ion-icon>
希望这对某人有所帮助!