Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 用typescript编写此开关/大小写的更好方法?_Javascript_Angular_Typescript_Design Patterns_Enums - Fatal编程技术网

Javascript 用typescript编写此开关/大小写的更好方法?

Javascript 用typescript编写此开关/大小写的更好方法?,javascript,angular,typescript,design-patterns,enums,Javascript,Angular,Typescript,Design Patterns,Enums,我正在Angular中开发一个非常简单的天气应用程序,我想问你是否认为有更好的方法根据天气编码的“类型”来选择特定的图像 enum WeatherCodition { Thunderstorm = 0, Drizzle, Rain, Snow, Clear, Clouds } export class Weather { getIcon(condition: WeatherCodition): string { va

我正在Angular中开发一个非常简单的天气应用程序,我想问你是否认为有更好的方法根据天气编码的“类型”来选择特定的图像

enum WeatherCodition {
    Thunderstorm = 0,
    Drizzle,
    Rain,
    Snow,
    Clear,
    Clouds
}

export class Weather {


    getIcon(condition: WeatherCodition): string {

        var iconPath = "";
        switch(condition){
            case WeatherCodition.Thunderstorm:
                iconPath =  "thunderstorm.png";
                break;
            case WeatherCodition.Clouds:
                iconPath =  "clouds.png";
                 break;
            case WeatherCodition.Drizzle:
                iconPath =  "drizzle.png";
                break;
            case WeatherCodition.Rain:
                iconPath =  "rain.png";
                 break;
            case WeatherCodition.Snow:
                iconPath =  "snow.png";
                break;
            default:
                iconPath = "clear.png"
        }

        return iconPath;
    }

}

可以基于密钥创建对象和访问属性

let WeatherCodition={
雷雨:“雷雨.png”,
云:“clouds.png”,
毛毛雨:“drizzle.png”,
雨:“rain.png”,
雪:“snow.png”,
默认值:“clear.png”
}
函数getIcon(条件){
条件=条件| |“”
condition=Object.keys(WeatherCodition).find(c=>c.toLowerCase()==condition.toLowerCase())| |“默认”
返回天气编码[条件]
}
console.log(getIcon(“”))
log(getIcon('Clouds'))
console.log(getIcon())

log(getIcon('SnoW'))
您的方法非常好。您还可以在switch语句中对URL进行编码时,为固定时间查找创建hashmap

   interface WeatherIcons {
     Thunderstorm: string;
     Clouds: string;
   }
   const icons: WeatherIcons = {
      Thunderstorm: "Thunderstorm.jpg",
      Clouds: "Clouds.jpg"
   }
   function getIcon(condition: WeatherCondition) {
      return icons[condition] || "default.jpg";
   }

为什么不定义一个数组

iconPaths:string[]=["thunderstorm.png","clouds.png","drizzle.png","rain.png","snow.png",
                   "clear.png"]
iconPath=this.iconPaths[condition];
//or 
iconPath=(condition && condition<6)?this.iconPaths[condition]:"";
iconPath:string[]=[“雷雨.png”、“云.png”、“细雨.png”、“雨.png”、“雪.png”,
“clear.png”]
iconPath=this.iconPath[条件];
//或

ICONPATH =(条件&条件> P>请考虑使用<代码>接口键值< /代码>作为数组。我的解决方案:

export enum WeatherCodition {
    Thunderstorm = 0,
    Drizzle,
    Rain,
    Snow,
    Clear,
    Clouds
}

import { KeyValue } from '@angular/common';

export class Weather {

    public keyValueArray: KeyValue<WeatherCodition, string>[] = 
    [
        { key: WeatherCodition.Thunderstorm, value: "thunderstorm.png" },
        { key: WeatherCodition.Drizzle , value: "drizzle.png"},
        { key: WeatherCodition.Rain, value: "rain.png" },
        { key: WeatherCodition.Snow, value: "snow.png" },
        { key: WeatherCodition.Clear, value: "clear.png" },
        { key: WeatherCodition.Clouds, value: "clouds.png" },
    ];

    getIcon(condition: WeatherCodition): string {
        //check if 'condition' exists in array as key
        return this.keyValueArray[condition] ? 
            this.keyValueArray[condition].value : 
            "clear.png"; 
    }
}
导出枚举天气编码{
雷暴=0,
下蒙蒙细雨
雨,
雪,
清楚的
云
}
从“@angular/common”导入{KeyValue};
出口级天气{
public keyValueArray:KeyValue[]=
[
{key:WeatherCodition.raundstorm,value:“reundstorm.png”},
{key:WeatherCodition.Drizzle,值:“Drizzle.png”},
{key:WeatherCodition.Rain,value:“Rain.png”},
{key:WeatherCodition.Snow,value:“Snow.png”},
{key:WeatherCodition.Clear,value:“Clear.png”},
{key:WeatherCodition.Clouds,value:“Clouds.png”},
];
getIcon(条件:WeatherCodition):字符串{
//检查数组中是否存在作为键的“条件”
是否返回此.keyValueArray[条件]?
此.keyValueArray[条件]。值:
“clear.png”;
}
}

祝您愉快!

不,案例都是enum中的类型。现在我更改问题,抱歉。最好为WeatherCondition:ImageUrl映射提供一个hashmap。这样,您可以在固定时间内直接访问所需的图标。抱歉,您能为我提供相关文档吗?非常感谢。