样式化的组件 - 尝试通过不同的键名访问 json

Posted

技术标签:

【中文标题】样式化的组件 - 尝试通过不同的键名访问 json【英文标题】:Styled components - Trying to access json by a different key name 【发布时间】:2020-03-30 03:13:28 【问题描述】:
import styled from "vue-styled-components";
const props =  type: String, action: Boolean ;

const getter = () => 
  const permissionsList = JSON.parse(localStorage.getItem("UZ")).permissions;
  const type = props.type;
  const action = props.action;

  return permissionsList.type.action;
;

export const stylePermission = styled("span")`
  pointer-events: $getter() ? "" : "none";
  cursor: $getter() ? "pointer" : "not-allowed";
  opacity: $getter() ? 1 : 0.4;
`;

我就是这样用的

<template slot="tab-head-roles">
   <sp-permission type="user" action="can_approve">
      <router-link to="/settings/roles">Roles</router-link>
   </sp-permission>
</template>

我无法访问return permissionsList.type.action;,因为JSON 对象中不存在typeaction,但对象中存在typeaction 的值。

什么是我访问它的最佳方式。

【问题讨论】:

可能具有正确的属性名称? 我不能使用正确的属性名称,因为它是动态的。 localStorage.getItem("UZ") 的价值是多少? 在这种情况下,您永远无法知道您需要什么属性值。如果你的对象的结构每次都不一样,你就不会得到一致的结果 @stud3nt 我得到一个 json 对象 【参考方案1】:

您可以使用方括号将typeaction 的值用作键名:-

const getter = () => 
  const permissionsList = JSON.parse(localStorage.getItem("UZ")).permissions;
  const type = props.type;
  const action = props.action;

  return permissionsList[type][action];
;

【讨论】:

我试过这个。但我收到此错误Uncaught TypeError: Cannot read property 'function Boolean() [native code] ' of undefined 试试console.log(permissionsList[type][action]),看看你得到了什么价值。并且还可以显示权限列表示例?【参考方案2】:

我就是这样解决的


import styled from "vue-styled-components";
const permissionProps =  type: String, action: String ;

const getter = JSON.parse(localStorage.getItem("UZ")).permissions;

export const stylePermission = styled("span", permissionProps)`
  pointer-events: $props => (getter[props.type][props.action] ? "" : "none");
  cursor: $props =>
    getter[props.type][props.action] ? "pointer" : "not-allowed";
  opacity: $props => (getter[props.type][props.action] ? 1 : 0.4);
`;


【讨论】:

以上是关于样式化的组件 - 尝试通过不同的键名访问 json的主要内容,如果未能解决你的问题,请参考以下文章

使用数组更改 JSON 的键名

如何“过滤”JSON 以获得唯一的键名/值对?

JSON对象的编组切片的键名需要小写[重复]

React 和 Typescript,样式化的组件和子组件

连接两个具有不同键名的表

在 iOS 中为 AVAsset 检索 AVMetadataItem 上的键名