我有一个天气应用程序,在那里我想用一个“全心”图标来标记多个最喜欢的城市。
目前,当我点击不同的城市时,之前的城市没有标记(有点仍然有问题),
所以基本上我只有一个“全心”图标显示,而不是几个。
感谢您帮助我修改我的应用程序。
添加和删除收藏夹工作正常(显示在“收藏夹”路线中),但我只是想不通
了解如何将其与收藏夹图标相结合。
https://stackblitz.com/edit/github-w3expd?file = src/app/weather-page/weather-page . component . html
Component.ts
js lang-js prettyprint-override">setLikedCity(index:any){
this.likedCity = index
}
addToFav(name:any, local:any){
let favCity = {
name:name,
local:local
}
console.log("local:", local, "name:", name)
console.log("this.favoriteLocations:", this.favoriteLocations)
if(this.favoriteLocations.length ==0){
this.favoriteLocations.push(favCity)
console.log("this.favoriteLocations:", this.favoriteLocations)
console.log("ADDED")
}
else if(this.favoriteLocations.length > 0){
let index;
for(let i =0; i<this.favoriteLocations.length; i++){
if(this.favoriteLocations[i].name.Key ==favCity.name.Key){
index = i
// break;
}
}
if(index !=null){
this.favoriteLocations.splice(index, 1)
this.likedCity = ''
console.log("REMOVED")
}else{
this.favoriteLocations.push(favCity)
console.log("ADDED")
}
console.log("this.favoriteLocations:", this.favoriteLocations)
}
this.weatherService.favoriteLocations = this.favoriteLocations
}
Component.html
<div class="container">
<div class="small-container">
<div class="row mt-5">
<div class="card" style="width: 18rem;" *ngFor="let name of TelAvivSearch; let i = index;">
<div class="card-body" style="text-align: center;">
<h5 class="card-title ">{{name.LocalizedName}}</h5>
<div *ngFor="let local of telAvivLocal ">
<p class="card-text ">{{local.WeatherText}}</p>
<p class="card-text ">{{local.Temperature.Metric.Value}}°</p>
<div *ngIf="i!==likedCity">
<i class="far fa-heart" (click)="addToFav(name, local);setLikedCity(i)"></i>
</div>
<div *ngIf="i===likedCity">
<i class="fas fa-heart" (click)="addToFav(name, local);"></i>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- favorites -->
<div class="forecast-container mt-3 ">
<h1 style="text-align: center; ">Forecast</h1>
<div class="small-container ">
<div class="row">
<div *ngFor="let forecast of Forecast.DailyForecasts">
<div class="card " style="width: 13rem; ">
<div class="card-body" style="text-align: center;">
<h5 class=" card-title ">{{forecast.Date | date}} </h5>
<p class="card-text ">Day: {{forecast.Day.IconPhrase}}</p>
<p class="card-text ">Night: {{forecast.Night.IconPhrase}}</p>
<p class="card-text ">{{forecast.Temperature.Maximum.Value}}°<span>/ {{forecast.Temperature.Minimum.Value}}°</span></p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
我所做的是:在< code>TelAvivSearch的所有元素中添加一个新的关键字< code > Liked,,如下所示:
{
"Version":1,
"Key":"3",
"Type":"City",
"Rank":31,
"LocalizedName":"Herzeliya",
"Liked":0, <<< new key 'Liked' added
"Country":{
"ID":"IL",
"LocalizedName":"Israel"
},
"AdministrativeArea":{
"ID":"TA",
"LocalizedName":"Tel Aviv"
}
},
当用户点击心形图标时-在< code>setLikedCity中我设置< code >这个。TelAvivSearch[索引]。喜欢= 1;如下:
setLikedCity(index:any){
this.TelAvivSearch[index].Liked = 1;
}
在addToFav
函数中,根据项目是否从收藏夹列表中添加/删除,设置喜欢
的值,如下所示:
.....
if(index !=null){
this.favoriteLocations.splice(index, 1)
this.TelAvivSearch[index].Liked = 0;
console.log("REMOVED")
.....
在< code>html文件中,将根据< code > like 键的值选择的心形图标显示为
<div *ngIf="name.Liked === 1">
<i class="fas fa-heart" (click)="addToFav(name, local);"></i>
</div>
它按预期工作。
如果我是你,那么我可能会给TelAvivSearch对象数组的所有对象添加一个额外的属性,称其为blFavorite,这将通过按下心脏来改变其值。如果满足条件*ngIf=name.blFavorite,也会在html端完整显示。
您可以在commponent.ts中添加以下方法,并在html端更改*ngIf条件 - 它现在应该可以工作了。
isLikedCity(key: number): boolean {
const idx = this.favoriteLocations.findIndex(
x => x.name['Key'] === key
);
return idx >= 0;
}
<div *ngIf="!isLikedCity(name.Key)">
<i class="far fa-heart" (click)="addToFav(name, local);setLikedCity(i)"></i>
</div>
<div *ngIf="isLikedCity(name.Key)">
<i class="fas fa-heart" (click)="addToFav(name, local);"></i>
</div>
我想检查实际元素是否有值。 例如,我想检查巧克力是黑色还是白色。根据这个,我想显示正确的文本。 如何修复代码,使其正常工作?
伙计们,你们能帮帮忙吗 所以我正在尝试显示我从后端获得的数据,但似乎 *ngFor 不起作用,只想返回启用的大小如何使用 ngIf 这是模板 这是我得到的数据(我正在循环的部分) 所以我需要显示每个尺寸的价格,然后减去折扣,如果未启用,则显示隐藏该尺寸。
我需要将*ngFor循环绑定到div,但我也需要仅在满足*ngIF条件后显示它。 但是Angular 4不会让你把它们结合起来。 我的代码: 我得到以下错误: 不能在一个元素上有多个模板绑定。只使用一个名为“模板”或以*为前缀的属性 那么你如何着手去做呢?
我想在一行中使用ngIF和ngFor。我知道这是不可能的,但有没有其他方法可以做到这一点? 这是我的代码:
问题内容: 我想在一行中使用ngIf和ngFor。我知道这是不可能的,但是还有其他方法可以做到吗? 这是我的代码: 问题答案: 一次只能在一个元素上使用一个结构指令。 作为解决方法,您可以使用未标记到DOM的方法
在下面的代码中,我试图在< code >选项卡下显示所有< code >项目(对象),它们应该基于它们的类别。 类别必须相等。 编辑:如果还不清楚,请看这里。 我正在尝试遍历选项卡并将每个选项卡的名称添加到选项卡的“模板”中。 然后,我尝试遍历项目,如果项目的类别与选项卡的类别匹配,那么它将显示在选项卡下。 出于某种原因,它似乎不起作用。我做错什么了吗?< br >请原谅我和我的逻辑,过去两天一直