Page Component
Create Page Component
TIP
Context Menu - [Module Path]: Zova Create/Page
Enter the name of the page component according to the prompt, such as counter
, and the VSCode extension will automatically create a route record and a file directory
Route
src/suite/a-demo/modules/demo-basic/src/routes.ts
typescript
import Counter from './page/counter/index.vue';
export const routes: IModuleRoute[] = [
//
{ path: 'counter', component: Counter },
];
- path:
counter
is a relative path, and since the page component belongs to the moduledemo-basic
, its absolute path is/demo/basic/counter
Directory
In Zova, a page component will be splited to four files:
src/suite/a-demo/modules/demo-basic/src/page/counter
src
└─ page
└─ counter
├─ index.vue
├─ controller.ts
├─ render.tsx
└─ style.ts
Name | Description |
---|---|
index.vue | define vue component |
controller.ts | local bean for business logic |
render.tsx | local bean for page render |
style.ts | local bean for page style |
index.vue
vue
<script setup lang="ts">
import { useControllerPage } from 'zova';
import { ControllerPageCounter } from './controller.js';
import { RenderCounter } from './render.jsx';
import { StyleCounter } from './style.js';
useControllerPage(ControllerPageCounter, RenderCounter, StyleCounter);
</script>
- Just import and use the
controller
bean,render
bean andstyle
bean inindex.vue
as well useControllerPage
will automatically introduce an IOC container and inject the required bean instances into the container
controller.ts
typescript
@Local()
export class ControllerPageCounter {
count: number = 0;
increment() {
this.count++;
}
decrement() {
this.count--;
}
}
- Define
controller
as a local bean using@Local
to register it in the ioc container - Define a reactive state
count
of typenumber
- Directly modify the value of
count
by vanilla javascript
render.tsx
typescript
@Local()
export class RenderCounter {
render() {
return (
<div>
<div>count(ref): {this.count}</div>
<button onClick={() => this.increment()}>Increment</button>
<button onClick={() => this.decrement()}>Decrement</button>
</div>
);
}
}
- Define
render
as a local bean using@Local
to register it in the ioc container - Write rendering logic using the
tsx
syntax in therender
method - Directly obtain the value of
count
by vanilla javascript
style.ts
typescript
@Local()
export class StyleCounter {}
- Define
style
as a local bean using@Local
to register it in the ioc container - Support powerful
css-in-js
capabilities, see: CSS-in-JS: Style & Theme
Page Parameters
You can pass the parameters to the page through the route. Zova enhances the page parameters and provides Typescript typing support