@dobschal/html.js
Version:
Library to create HTML elements with JavaScript that support MVVM binding.
159 lines (112 loc) • 3.43 kB
Markdown
in Javascript implementation featuring Model View Binding. It allows you to create HTML elements using
template literals and bind them to your model.

[](https://www.npmjs.com/package/@dobschal/html.js)
```bash
npm install --save @dobschal/html.js
```
The example below creates a simple div element with the text "Hello World" and appends it to the body.
```javascript
import {html} from '@dobschal/html.js';
document.body.append(
html`<div>Hello World</div>`
);
```
The created `view` is bound to the `count` observable. When the count changes, the view is updated:
```javascript
import {html} from '@dobschal/html.js';
import {Observable} from '@dobschal/observable';
const count = Observable(0);
const view = html`
<p>👉 ${count}</p>
<button onclick="${() => count.value++}">Count Up 🚀</button>
`;
document.body.append(...view);
```
**Example for binding input values:**
```javascript
const name = Observable("Sascha");
const view = html`
<p>👉 ${name}</p>
<input type="text" value="${name}" />
`;
```
`html` is a tagged template literal function that creates an HTML element or elements from a template string.
```javascript
// Create a div element with the text "Hello World"
const element = html`<div>Hello World</div>`;
console.log(element instanceof HTMLElement); // true
```
In case the HTML template contains multiple elements, an array of elements is returned!
When appending to the DOM, you can use the spread operator to append all elements at once.
```javascript
document.body.append(...html`
<div>Hello World 1</div>
<div>Hello World 2</div>
`);
```
You can create components by defining a function that returns an HTML element.
```javascript
function MyComponent() {
return html`<div>Hello World</div>`;
}
function App() {
return html`
<div>
${MyComponent()}
</div>
`;
}
document.body.append(App());
```
You can add event listeners to elements by using the standard HTML event attributes.
```javascript
html`
<button onclick="${() => console.log('Clicked')}">Click Me</button>
`;
```
You can bind an observable to an element by using the observable directly in the template.
```javascript
import {Observable} from '@dobschal/observable';
const count = Observable(0);
const view = html`
<p>👉 ${count}</p>
<button onclick="${() => count.value++}">Count Up 🚀</button>
`;
```
You can conditionally render elements by using the ternary operator or the custom `if` attribute.
```javascript
const show = Observable(true);
// With the ternary operator
const view = html`
${show ? html`<div>Hello World</div>` : null}
`;
// With the if attribute
const view = html`
<div if="${show}">Hello World</div>
`;
```
You can render lists by using the `map` function on an array or observable array.
```javascript
const items = Observable([1, 2, 3]);
const view = html`
<ul>
${items.map(item => html`<li>${item}</li>`)}
</ul>
`;
```

Sascha Dobschal
A simple HTML