From 72b993b2afcc6f5303948c435087a91589333dac Mon Sep 17 00:00:00 2001 From: Tevin <tingquanren@163.com> Date: Mon, 03 Mar 2025 15:46:48 +0800 Subject: [PATCH] 知识库文档,新增数据库控制文档,项目介绍调整 --- _knowledges/201-请求层基类Fetcher.md | 33 +++++++ _knowledges/202-数据控制层基类Pilot.md | 109 +++++++++++++++++++++++++++ _knowledges/101-项目介绍.md | 78 ------------------- 3 files changed, 142 insertions(+), 78 deletions(-) diff --git "a/_knowledges/101-\351\241\271\347\233\256\344\273\213\347\273\215.md" "b/_knowledges/101-\351\241\271\347\233\256\344\273\213\347\273\215.md" index 4476b55..c7771c8 100644 --- "a/_knowledges/101-\351\241\271\347\233\256\344\273\213\347\273\215.md" +++ "b/_knowledges/101-\351\241\271\347\233\256\344\273\213\347\273\215.md" @@ -110,81 +110,7 @@ }); ``` -##### 数据控制层的 Vue 属性 - -数据控制器中的 Vue 属性,需要使用 $ 开头 - -```js -// 数据控制器 -export class PIndex extends Pilot { - $data() { - return { - a: 1, - }; - } - $computed = { - a2() {}, - }; -} -``` - -会转换成 - -```js -// 标准 Vue -const Component = Vue.extend({ - data() { - return { - a: 1, - }; - }, - computed: { - a2() {}, - }, -}); -``` - -##### 数据控制层的 Vue 方法 - -数据控制器中的 Vue 方法,不用写 methods 中,直接写最外层 - -```js -// 数据控制器 -export class PIndex extends Pilot { - onOpenSelector() {} -} -``` - -会转换成 - -```js -// 标准 Vue -const Component = Vue.extend({ - methods: { - onOpenSelector() {}, - }, -}); -``` - -注意:数据控制器中不能使用 $name、$components、$methods 这三项,因为实际合并时会覆盖 - -#### 实际合并 - -数据控制层和界面层实际的合并,写在界面层上 - -```js -// 引入界面层对应数据控制器 -import { - PPageName -} from '@pilots/pilotGroup/PPageName'; - -export default { - name: 'PageName', - components: {}, - // 示例化数据控制器,由实例生成 Vue 选项,再展开合并到界面 Vue 对象上 - ...new PPageName().createOptions(), -}; -``` +更多细节,请参照《数据控制层基类Pilot》 ## 新页面示例 @@ -319,7 +245,7 @@ } ``` -说明:请求异常由请求层的基类自动处理,数据控制层跳过错误的逻辑,只处理成功 +说明:请求异常由请求层的基类自动处理,数据控制层跳过错误的逻辑,只处理请求成功的后续业务 #### 空白请求层示例 diff --git "a/_knowledges/201-\350\257\267\346\261\202\345\261\202\345\237\272\347\261\273Fetcher.md" "b/_knowledges/201-\350\257\267\346\261\202\345\261\202\345\237\272\347\261\273Fetcher.md" index ac75184..310f85c 100644 --- "a/_knowledges/201-\350\257\267\346\261\202\345\261\202\345\237\272\347\261\273Fetcher.md" +++ "b/_knowledges/201-\350\257\267\346\261\202\345\261\202\345\237\272\347\261\273Fetcher.md" @@ -1,6 +1,6 @@ # 请求层基类 Fetcher.js -类 Fetcher 是一个用于处理 HTTP 请求的工具类,包含了多种方法来简化和统一请求的处理,请求层的每个请求集,都必须继承此类 +类 Fetcher 是一个用于处理 HTTP 请求的基类,包含了多种方法来简化和统一请求的处理,请求层的每个请求集,都必须继承此类 ## 引用方法 @@ -89,7 +89,7 @@ ```js class FCommon extends Fetcher { - // 请求示例:获取用户基本信息(在数据控制层中调用) + // 请求方法使用示例:获取用户基本信息(提供给数据控制层中调) getUserInfo(id) { const url = this.spellURL('getUserInfo', 'user/user_info'); const send = { @@ -154,3 +154,32 @@ | 5000 | 通用请求失败,弹窗提示 msg | | 9001 | 登录已过期,返回登录页 | | 9002 | 已登录但没有操作权限,弹窗提示 msg | + +## 请求调用 + +请求层的每一个请求集,都会实例化自身作为全局单例(数据控制层无需再示例化) + +例如,请求集 FCommon 会实例化自身为 $fetchCommon + +```js +import { + $fetchCommon +} from '@fetchers/FCommon'; + +export class PPageName extends Pilot { + + // 在数据控制层中,发请求示例 + onLoadUserInfo() { + Taro.showLoading(); + $fetchCommon.getUserInfo(this.userId) + .then(res => { + Taro.hideLoading(); + if (!res) { + return; + } + this.userInfo = res || {}; + }); + } + +} +``` diff --git "a/_knowledges/202-\346\225\260\346\215\256\346\216\247\345\210\266\345\261\202\345\237\272\347\261\273Pilot.md" "b/_knowledges/202-\346\225\260\346\215\256\346\216\247\345\210\266\345\261\202\345\237\272\347\261\273Pilot.md" new file mode 100644 index 0000000..ecb0df1 --- /dev/null +++ "b/_knowledges/202-\346\225\260\346\215\256\346\216\247\345\210\266\345\261\202\345\237\272\347\261\273Pilot.md" @@ -0,0 +1,109 @@ +# 数据控制层基类Pilot + +类 Pilot 是数据控制层的基类,用于将一个 Vue 对象的部分功能拆分出来独立申明后再合并回去,每个数据控制器都需要基础此类 + +## 引用方法 + +```js +import { + Pilot +} from '@components/bases/Pilot'; +``` + +## 主要方法 + +```js +/** + * 创建页面选项 + * @param {Object} dataAdd - 需要添加到 vue data 中的额外数据 + * @returns {Object} 页面选项对象 + */ +createOptions(dataAdd) {} + +/** + * 转换静态图片引用 + * @static + * @param {Object} assets - 静态图片对象 + * @returns {Object} 转换后的静态图片对象 + */ +static transAssets(assets = {}) {} +``` + +## 创建页面合并对象 + +`createOptions` 是类 Pilot 的核心方法,此方法将独立申明的信息合并回原 Vue 对象 + +### 主要工作 + +* 扫描当前类,以 \$ 开头的属性或方法,去掉 \$ 符后,直接作为 Vue 的属性或方法准备合并 +* 扫描当前类,非以 \$ 开头的方法,作为 Vue 对象申明中 methods 的子级方法准备合并 +* 生成合并对象,用以进行合并 + +```js +// 数据控制器中,用 $ 开头的视为 Vue 属性或方法 +export class PIndex extends Pilot { + $data() { + return { + a: 1, + }; + } + $computed = { + a2() {}, + }; + $mounted() {} +} + +// 合并后的实际效果 +const Component = Vue.extend({ + data() { + return { + a: 1, + }; + }, + computed: { + a2() {}, + }, + mounted() {}, +}); +``` + +```js +// 数据控制器中,非 $ 开头的,转到 methods 中 +export class PIndex extends Pilot { + onOpenSelector() {} +} + +// 合并后的实际效果 +const Component = Vue.extend({ + methods: { + onOpenSelector() {}, + }, +}); +``` + +注意:不能在数据控制器中定义 $name、$components、$methods 这三项,因为实际合并时会覆盖 + +### 实际合并 + +数据控制层和界面层实际的合并,其实是写在界面层上 +由界面层实例化数据控制层,并使用其基类的 createOptions 方法生成选项,再合并进原 Vue 对象 + +```js +// 引入界面层对应数据控制器 +import { + PPageName +} from '@pilots/pilotGroup/PPageName'; + +export default { + name: 'PageName', + components: {}, + // 示例化数据控制器,由实例生成 Vue 选项,再展开合并到界面 Vue 对象上 + ...new PPageName().createOptions(), +}; +``` + +### 页面能力扩展:跨页面通讯 + +给实际 Vue 实例增加了 + +### 页面能扩展:跨端通讯 -- Gitblit v1.9.1