# nodomdev **Repository Path**: weblabsw/nodomdev ## Basic Information - **Project Name**: nodomdev - **Description**: nodom 开发库 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 3 - **Created**: 2021-11-09 - **Last Updated**: 2025-03-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README nodom是一款基于数据驱动的web mvvm框架。用于搭建单页应用(SPA)。内置路由,提供数据管理功能,支持模块化开发。在不使用第三方工具的情况下可独立开发完整的单页应用。 ## 开始 ### 源码 1. gitee: https://gitee.com/weblabsw/nodom3 2. github: https://github.com/nodomjs/nodom3 ### npm包 1. nodom3: https://www.npmjs.com/package/nodom3 2. nodom3-cli(脚手架):https://www.npmjs.com/package/nodom3-cli ### API 更多使用细节参考[API](./api/nodom3.md)。 ### 版本 版本信息参考[版本信息](./update.md)。 ### 目录结构 1. 核心库目录./core:核心框架源码 2. 扩展目录./extend:预定义指令和自定义元素 3. 示例目录./examples:示例 4. 发布目录./dist:发布包,所有示例从该目录引入编译后的nodom文件 #### dist目录文件说明 1. nodom.esm.js:es module模式的开发包 2. nodom.esm.min.js: es module模式的生产包 ### 示例 以vscode为例,使用Live Server插件启动./examples目录下的html文件即可,示例目录总入口在`index.html`文件。 ### 编译 先运行`npm i`安装依赖,具体依赖包参考`package.json文件“devDependencies”配置项`,安装依赖包后,执行“npm run build”,编译结果在“/dist”目录中。 ### 调试模式 使用`Nodom.debug()`启动调试模式,调试模式会对表达式的异常进行输出,启动调试模式示例如下: ```javascript import{Nodom} from '/dist/nodom.esm.js' Nodom.debug(); ``` ### 国际化 使用`Nodom.setLang(language)`设置语言,默认为中文,Nodom支持语言包括: | 设置项 | 描述 | | - | - | |zh|中文| |en|英文| 设置语言方法示例如下: ```javascript import{Nodom} from '/dist/nodom.esm.js' //设置语言为英文 Nodom.setLang('en'); ``` ### 实例化单例模式 使用`Nodom.Use(clazz)`以单例模式实例化类,实例化后,可以通过Nodom['$'+类名]方式进行使用,便于用户在代码中当作静态类使用。示例如下: ```javascript import{Nodom,Router} from '/dist/nodom.esm.js' //启用Router功能 const router = Nodom.use(Router); //以下两种方式使用,foo为Router类的成员方法 router.foo(); //或 Nodom['$Router'].foo(); ``` ### CDN 下列代码引入`nodom.esm.min.js`文件,即es module模式的nodom生产环境包。 ```js import{Nodom,Module} from "https://unpkg.com/nodom3" ``` ### 下载引入 Nodom使用ES Module实现模块化,无需构建工具即可完成模块化开发,引入方式如下: ```html ``` ### 第一个例子 此例子在页面中输出"Hello Nodom"。 ***假设你已经掌握一定的Html,Css,JavaScript基础,如果没有,那么阅读文档将会有些困难。*** ```html
代理到ul元素
{{name}}
``` #### 指令列表 目前NoDom支持以下几个指令: | 指令名 | 指令优先级 | 指令描述 | | - | - | - | | model | 1 | 绑定数据 | | repeat | 2 | 按照绑定的数组数据生成多个相同节点 | | recur | 2 | 递归 | | if | 5 | 条件判断 | | else | 5 | 条件判断 | | elseif | 5 | 条件判断 | | endif | 5 | 结束判断 | | show | 5 | 显示/隐藏 | | slot | 5 | 插槽 | | module | 8 | 模块(表明节点为模块) | | field | 10 | 双向数据绑定 | | route | 10 | 路由 | | router | 10 | 路由容器 | #### 自定义指令 除了Nodom自带的指令,用户可以通过`Nodom.createDirective()`方法创建指令,参数如下: | 序号 | 说明 | 类型 | 备注 | | - | - | - | - | | 1 | 指令名 | string | 无 | | 2 | 指令执行方法 | Function | 执行方法默认传递两个参数:1 module(dom所属模块), 2 dom(所属渲染节点,类型RenderedDom)。方法中的this指向指令| | 3 | 优先级 | Number | 1-10,如果设置优先级<5,需慎重 | 指令执行方法返回true/false,当返回false时,不再进行当前节点的后续渲染,包括子节点渲染,同时该dom节点不加入到渲染树中,也就是说,不会渲染到document中,更多详情参考源码 /extend/directiveinit.ts。 ```javascript Nodom.createDirective( 'directive name', function (module: Module, dom: RenderedDom){ //your code }, 10 ) ``` #### model 指令 model指令用于给view绑定数据,数据采用层级关系,如:需要使用数据项data1.data2.data3,可以直接使用data1.data2.data3,也可以分2层设置分别设置x-model='data1',x-model='data2',然后使用数据项data3。下面的例子中描述了x-model的几种用法。 ```js class Main extends Module{ template(){ return `{{name.firstName}} {{name.lastName}}
{{firstName}} {{lastName}}
{{title}}
不及格,分数为:{{score}}
及格,分数为:{{score}}
中等,分数为:{{score}}
良好,分数为:{{score}}
优秀,分数为:{{score}}
我是父模块的P元素