将自定义 getter 添加到接收到的 json

Posted

技术标签:

【中文标题】将自定义 getter 添加到接收到的 json【英文标题】:Add custom getter to received json 【发布时间】:2021-01-18 19:34:58 【问题描述】:

将自定义getter添加到json的最佳方法是什么,这在某些视图中经常使用?例如考虑代表用户对象的json。此 json 具有 firstNamelastName、“年龄”等字段。当我想要在 Vue 组件中使用用户名渲染标签时,我想要这样的标签:firstName + ' ' + lastName + '(' + age + ')'

我希望在整个 SPA 应用程序中在这个 json 中有新的字段或吸气剂。我有这样的想法:

从 axios 接收 json,然后像这样修改这个 json:responseData.fullName = responseData.firstName + ' ' + responseData.lastName + '(' + responseData.age + ')'

将 json 映射到类对象,该对象将映射所有字段,并将 getter 连接到全名,如下所示:user = new User(responseData)

还是我没有提到的其他方式?

我是开发单页应用程序的新手,因此我将不胜感激。

【问题讨论】:

【参考方案1】:

您可以将 getter 添加到您的 User 类中

class User      
  get fullName() 
    return `$this.firstName $this.lastName ($this.age)`
  

https://developer.mozilla.org/en-US/docs/Web/javascript/Reference/Functions/get

考虑使用计算属性:

export default 
  name: 'SomeComponent',
  computed: 
    userFullName() 
      return this.user ? `$this.user.firstName $this.user.lastName ($this.user.age)` : '';
    
  ,
  data() 
    return 
      user: null
    ;
  ,
  methods: 
    async loadData() 
      this.user = await axios.get('');
    
  
;

【讨论】:

嗨,谢谢你的努力。我知道该怎么做,我只是问是否将 json 映射到将放置 getter 的类对象的好习惯,或者还有另一种使用的方法:) @DenisStephanov 对不起。我想我没有清楚地理解你问的问题。在将 json 映射到具有 getter 的对象时,我没有看到任何不好的地方。但我宁愿为此目的使用组件计算属性。 @DenisStephanov 我已添加到使用计算属性的答案示例中 但是我需要在多个组件中使用全名,这样我需要在多个组件上创建计算属性并复制代码。【参考方案2】:

你可以写一个这样的函数。它获取具有“firstName”和“lastName”属性的对象的参数并对其进行解构。 这是关于解构的链接。

https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment

然后使用模板文字。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals

function getFullName( firstName, lastName)  
    return `$firstName $lastName`;


console.log(getFullName(responseData));

// prints for example: Denis Stephanov

【讨论】:

请不要只发布代码作为答案,还要解释您的代码的作用以及它如何解决问题的问题。带有解释的答案通常更有帮助、质量更好,并且更有可能吸引投票。

以上是关于将自定义 getter 添加到接收到的 json的主要内容,如果未能解决你的问题,请参考以下文章

身份服务器 - 将自定义参数添加到来自令牌端点的 JSON 响应

无法将自定义对象从 API 保存到核心数据

使用javascript将自定义json对象复制到剪贴板

将自定义 ValueProviderFactories 添加到 ASP.NET MVC3?

如何将自定义css和js添加到angular 4

如何将自定义图标添加到 Angular2 primeng Tree