当前位置: 首页 > 知识库问答 >
问题:

NgFor/NgIF乘法选择(收藏夹)

申屠锦
2023-03-14

我有一个天气应用程序,在那里我想用一个“全心”图标来标记多个最喜欢的城市。

目前,当我点击不同的城市时,之前的城市没有标记(有点仍然有问题),

所以基本上我只有一个“全心”图标显示,而不是几个。

感谢您帮助我修改我的应用程序。

添加和删除收藏夹工作正常(显示在“收藏夹”路线中),但我只是想不通

了解如何将其与收藏夹图标相结合。

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>

共有3个答案

凌运恒
2023-03-14

我所做的是:在< 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>

它按预期工作。

伏德义
2023-03-14

如果我是你,那么我可能会给TelAvivSearch对象数组的所有对象添加一个额外的属性,称其为blFavorite,这将通过按下心脏来改变其值。如果满足条件*ngIf=name.blFavorite,也会在html端完整显示。

仲孙飞文
2023-03-14

您可以在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 >请原谅我和我的逻辑,过去两天一直