angularjs 从后端获取一个枚举,并在JavaScript中将其作为字符串使用

8hhllhi2  于 2023-09-30  发布在  Angular
关注(0)|答案(4)|浏览(142)

今天我和一个java后端开发人员进行了一次相当不愉快的讨论。我用jsangular做前端。他的休息服务发送给我一个对象,其中包括一个枚举。我得到了一个字符串,需要在一个角网格中显示它。
枚举是非常自我解释。
我得到的例子:Person = {gender: "MAN", position: "IS_EMPLOYED"}
在视图中,我必须显示以下内容:man is employed
所以我用一种简单而通用的方法解决了它:Person.gender.toLowerCase () + ' ' + Person.position.toLowerCase ().replace ('_', ' ')
他发现了这个可怕的编程,并要求我用if else或switch So做一个Map器:If(Person.gender==="MAN") return "man" Else if....
标签名称始终与枚举名称相同(只有小写和空格而不是下划线)
他暴跳如雷,说这是糟糕的编码,基本上是可怕的,是对上帝的罪恶...
所以我的问题是,这种坏/好的做法(所以一个B/W的故事),或者在某些情况下是可以接受和辩护的?
在我的手机上打字,所以我不能把代码示例放在正确的标签中。

6rvt4ljy

6rvt4ljy1#

有几种方法来看待这一点:

**Map更健壮:**他说得对,应该有一个完整的Map函数。这允许您处理错误(即如果你得到的position的响应是“banana”,你可能不应该把它扔出去)。这在后端开发中尤其重要,因为您可能正在使用严格的模式。
**规模问题:**您的方法在技术上没有任何错误。如果条目数量较少,或者用户群或应用范围较小,则可能没有太大关系。它并不真正符合最佳实践,但它有效,如果这是最重要的,它可能就足够了。尽管您应该始终努力获得最佳实践,但您需要牢记大局。
**效率:**一种方法可能比另一种方法更有效。差异可以忽略不计。在web开发中,速度是优先考虑的,如果两种方法都得到相同的结果,但其中一种方法要快得多,请选择该方法。

gcuhipw9

gcuhipw92#

制作一个客户端-枚举Map可能是一个更好的主意-然后只发送回实际值。因此,您可以:

var personTypes: {
    "1": "Is Employed",
    ..
}

然后简单地将1作为enum发送回去,并使用lookup对象:

console.log("Person status: " + personTypes[Person.position]);

这也使得显示类型列表变得更容易-选择一个新的类型,然后简单地将枚举发送回去:

<select ng-model="personTypeEnum" ng-options="enum as type for (enum, type) in personTypes"></select>
flseospp

flseospp3#

使用打印对象检入控制台。例如,如果对象是person,那么如果您将此对象渲染为json,则gender(enum)将为

{"success":true,"person":[{"class":"person","id":26,"comment":null,"gender":{"enumType":"com.project.Person$Gender","name":"MEN"},

所以你可以打印person.gender.name,这将给予男人

0x6upsns

0x6upsns4#

问题中的方法使应用程序的国际化变得更加困难。我也更喜欢一个中央实用函数来将枚举值Map到显示值。如果需要国际化前端,只需根据当前语言返回适当的显示值即可。

相关问题