Cpage.js是一款轻量级的前端框架,使用TypeScript开发,可以方便地进行组件化开发,语法统一、简介明了,不依赖于第三方框架,适合中小项目开发。框架同时支持es5与es6语法,可参考example中示例。
npx happy-web-cli init 项目名称
? 请选择模板 (Use arrow keys)
❯ Cpage.Js项目js版本 
  react:h5 单页面模板 
  react:h5 多页面模板 
  react:后台模板 
选择第一个即可
es6  npm install cpage
     import Cpage,  { Component } from 'cpage'; 
es5  <script src="https://cpagejs.github.io/source/cpage/bundle.js"></script>
var app = Cpage.component({
    name: 'app',
    components: [],
    template: `<div>{{header}}--{{height}}</div>`,
    data: {
        header: 'this is header'
    },
    props: {
        height: {
            default: 10
        }
    },
    beforeRender() {
        console.log('beforeRender')
    },
    render() {
        console.log('render')
    }
});
Cpage.bootstrap("#app", app);import Cpage,  { Component } from 'cpage';
const html = require('./app.html');
export default class App extends Component {
    constructor(){
        super();
        this.name = 'app';
        this.data = {};
        this.templateUrl = html;
    }
    handelC(event){
        this.$event.trigger('header-event', 'header');
    }
    render(){
        
    }
}
Cpage.bootstrap('#app', App);路由需要使用<div c-view></div>
| 方法名 | 用法 | 
|---|---|
| go() | this.$router.go({path='', params={}}),跳转到已存在的路由页面 | 
| hash() | this.$router.hash(str),此方法可以更改页面的hash路由 | 
| reflesh() | this.$router.reflesh(),刷新当前路由 | 
| back() | this.$router.back(),返回 | 
| 路由示例 | 
Cpage.router([
    {
        path: '/',
        component: Header
    },
    {
        path: '/article',
        component: Article,
        params: {
            id: 123
        },
        cache: true,
        delay: 2000
    },
    {
        path: '/article/:id',
        component: ArticleList
    },
    {
        path: '/about',
        component: About,
        cache: true,
    },
    {
        path: '/footer/oo',
        component: Footer
    }
]);注册路由之后,可以在组件内使用路由相关函数。
| 属性名 | 是否必须 | 类型 | 用途 | 
|---|---|---|---|
| name | 是 | 字符串 | 组件名称,需要使用驼峰命名的规则;比如定义组件名称为cFooter那么子组件应用使用 | 
| components | 是 | 数组 | 子组件名称集合 | 
| data | 否 | 对象 | 组件属性 | 
| props | 否 | 对象 | 用于子组件与父组件之间的数据传递 | 
| style | 否 | 字符串 | 组件样式 | 
| styleId | 否 | 字符串,id选择符 | 组件样式,es5语法 | 
| styleUrl | 否 | 数组或对象 | 组件样式,es6语法,支持import * as css from ''; 或者require('../style.css'),需要引入css-loader | 
| template | 否 | 字符串 | 组件模板,es5,es6通用 | 
| templateId | 否 | 字符串,id选择符 | 组件模板,es5语法 | 
| templateUrl | 否 | 数组或对象 | 组件模板,es6语法,支持import * as html from ''; 或者require('../xx.html'),需要引入html-loader | 
| 方法名 | 是否必须 | 用途 | 
|---|---|---|
| beforeRender | 否 | 组件完成渲染之前执行 | 
| beforeUpdate | 否 | 组件更新之前执行 | 
| afterUpdate | 否 | 组件更新之后执行 | 
| render | 是 | 组件完成渲染之后执行 | 
| bootstrap | 是 | Cpage对象的静态方法,用于将组件渲染到dom中 | 
支持文字,运算符,变量 {{1+2}} 或者 {{text}} 表达式的变量与组件的data或props属性对应
| 指令名 | 用法 | 用途 | 
|---|---|---|
| c-事件名 | c-event="handel()" event可以为click,mouseover... | 用于dom的事件绑定 | 
| c-for | c-for="item in items" | 用于循环输出指定次数的 HTML 元素,表达式必须是数组 | 
| c-if | c-if="{{id>10}}" | 表达式为true,则渲染节点;否则不渲染 | 
| c-show | c-show="{{id>10}}" | 表达式为true,则显示节点;否则隐藏 | 
| c-ref | c-ref="btn" | 节点标识符 | 
| c-html | c-html="span" | 将表达式内的字符替换节点的html | 
| 方法名 | 应用范围 | 用途 | 
|---|---|---|
| $data | 整个组件生命周期 | 修改组件的data属性,例:this.$data('text', 'new text') | 
| $el | 组件渲染完毕之后才能使用 | 组件节点 | 
| $refs | 组件渲染完毕之后才能使用 | 单个dom节点,例:this.$refs['the-ele'],需要配合c-ref使用 | 
| $http | 整个组件生命周期 | 操作http,例:this.$http.ajax({})。支持ajax(),get(),post()等操作 | 
| $event | 整个组件生命周期 | 事件触发和监听,例:this.$event.trigger(事件名,信息) this.$event.listen(事件名, 回调函数) | 
Cpage.js提供建议的dom操作方式 es6语法
import { Dom } from 'cpage';
Dom('body').css('width')
Dom('body').width('100px')
Dom('body').hasClass('dom')