An open API service indexing awesome lists of open source software.

https://github.com/acryps/vldom

simple component system
https://github.com/acryps/vldom

Last synced: 6 days ago
JSON representation

simple component system

Awesome Lists containing this project

README

          

[![npm version](http://badge.acryps.com/npm/vldom)](http://badge.acryps.com/go/npm/vldom)

# vldom TypeScript Frontend Component System

Simple component system with integrated routing.

> version 9: new engine, even more efficient

## Setup
You"ll need to enable jsx in your tsconfig

{

"compileOnSave": false,
"compilerOptions": {
"jsx": "react",
"jsxFactory": "this.createElement",

....
}
}

Compile your client with `tsc` and `vldom compile`!
```
tsc && vldom compile
```

## Usage
Create a component by extending the component class

```
export class ExampleComponent extends Component {
constructor() {
super();
}

render() {
return
Example Component!
;
}
}

new ExampleComponent().host(document.body);
```

Let"s extends this by creating a recursive component

```
export class ExampleRecursiveComponent extends Component {
constructor(private index: number) {
super();
}

render() {
return
Component {this.index}

{index > 0 && new ExampleRecursiveComponent(index - 1)}
;
}
}

new ExampleRecursiveComponent(10).host(document.body);
```

## Router
vldom has a built-in router
```
const router = new Router(PageComponent
.route("/home", HomeComponent),
.route("/books", BooksComponent
.route("/:id", BookComponent)
)
);

class PageComponent extends Component {
render(child) {
return
App

{child}
;
}
}

class HomeComponent extends Component {
render() {
return

Welcome to my Book Store

;
}
}

class BooksComponent extends Component {
render() {
return

Books!

Some Book!
;
}
}

class BookComponent extends Component {
params: { id: string }

render() {
return

Book with id {this.params.id}

;
}
}

router.host(document.body);

onhashchange = () => router.update();
```

## Directives
You can create custom directives (attribute handlers).

```
Component.directives["epic-link"] = (element, value, tag, attributes, content) => {
element.onclick = () => {
location.href = value;
}
}

export class ExampleComponent extends Component {
constructor() {
super();
}

render() {
return
Test Link
;
}
}

new ExampleComponent().host(document.body);
```