A simple Angular component to display object data in an expandable JSON tree view.
- Display JSON objects and arrays in a collapsible tree structure.
- Customize styling with CSS variables.
- Clickable value nodes for custom interactions.
- Control over initial expansion depth.
- Keyboard navigable
https://stackblitz.com/edit/ngx-json-treeview
npm install ngx-json-treeviewBy default, JSON objects are rendered fully expanded:
<ngx-json-treeview [json]="someObject" />To render the JSON with all nodes initially collapsed:
<ngx-json-treeview [json]="someObject" [expanded]="false" />Or with nodes expanded up to a certain depth:
<ngx-json-treeview [json]="someObject" [depth]="1" />You can make values in the JSON tree clickable to trigger custom actions. For convenience, a default click handler is provided for URLs (which will be opened in a new tab, when clicked.)
-
Enable Clickable Values: Set the
enableClickableValuesinput totrue. This also enables the default click handler(s) automatically.<ngx-json-treeview [json]="someObject" [enableClickableValues]="true" />
-
Provide Click Handlers: Provide your own custom behaviors by passing an array of
ValueClickHandlerobjects to thevalueClickHandlersinput.A
ValueClickHandlerhas two properties:canHandle: A function that returnstrueif the handler should apply to a given value.handler: The function to execute when the value is clicked.
Only the first handler in the array where
canHandlereturnstruewill be executed.
Here's how you could implement a handler that copies a string value to the clipboard when clicked.
In your component's TypeScript file:
import { Segment, ValueClickHandler } from 'ngx-json-treeview';
// Define a custom click handler
copyToClipboardHandler: ValueClickHandler = {
canHandle: (segment: Segment) => typeof segment.value === 'string',
handler: (segment: Segment) => {
navigator.clipboard.writeText(segment.value).then(() => {
alert(`Copied "${segment.value}" to clipboard!`);
});
},
};
customValueClickHandlers: ValueClickHandler[] = [
this.copyToClipboardHandler,
// Add addt'l custom handlers here
];In your component's HTML file:
<ngx-json-treeview
[json]="someObject"
[enableClickableValues]="true"
[valueClickhandlers]="customValueClickHandlers"
/>In this example, any string value will be clickable. When clicked, it will be copied to the clipboard.
Custom handlers can be combined alongside the built-in ones (such as the URL
handler). To apply all of the default built-in handlers, you can import the VALUE_CLICK_HANDLERS array and spread it into your customValueClickHandlers
array. Alternatively, handlers be the imported individually via
ValueClickHandlers.
import {
ValueClickHandlers,
VALUE_CLICK_HANDLERS,
} from 'ngx-json-treeview';
customValueClickHandlers: ValueClickHandler[] = [
...VALUE_CLICK_HANDLERS,
this.copyToClipboardHandler,
];
// OR
customValueClickHandlers: ValueClickHandler[] = [
ValueClickHandlers.followLinkHandler,
this.copyToClipboardHandler,
];In this example, any string that matches a URL will trigger the followLinkHandler, and all other strings will trigger the copyToClipboardHandler.
You can customize the appearance of the tree view using these CSS variables:
| Variable | Description |
|---|---|
--ngx-json-font-family |
Font family for the tree view. |
--ngx-json-font-size |
Font size for the tree view. |
--ngx-json-focus-color |
Outline color for focused elements. |
--ngx-json-toggler |
Color of the expand/collapse toggler. |
--ngx-json-key |
Color of object keys. |
--ngx-json-label |
Color of array indices. |
--ngx-json-value |
Default color for primitive values. |
--ngx-json-string |
Color for string values. |
--ngx-json-number |
Color for number values. |
--ngx-json-boolean |
Color for boolean values. |
--ngx-json-date |
Color for date values. |
--ngx-json-function |
Color for function values. |
--ngx-json-null |
Text color for null values. |
--ngx-json-null-bg |
Background color for null values. |
--ngx-json-undefined |
Text color for undefined values. |
--ngx-json-undefined-key |
Key color for undefined values. |
--ngx-json-undefined-bg |
Background color for undefined values. |
--ngx-json-punctuation |
Color of braces, brackets, and commas. |
ngx-json-treeview is originally based on ngx-json-viewer by Vivo Xu and contributors.