这是一套Web前端开发的工程文档,用于指导移动端(H5网页、混合App、小程序等)的开发
说明:使用时,优先使用公共组件库的组件,其次是 Taro-UI-Vue 的组件,最后才是 Taro 本身的基础组件
工程主要目录及其用途
工程资源引用时,通常使用更短的引用路径:
@components
代表 root/src/components
@fetchers
代表 root/src/fetchers
@pages
代表 root/src/pages
@pilots
代表 root/src/pilots
例如:'@components/layout/h5Page' 实际引用的是 'root/src/components/layout/h5Page'
当我们说组件的时候,就是指普通 Vue 组件
当我们说业务页面的时候,则是由**界面层**和**数据控制层**两部分组成
同时页面层有子组件,数据层关联请求层,结构如下
一个业务页面的界面层和数据控制层,实际上是对一个 Vue 组件的拆分,最终运行的时候,还是会合二为一,还原成原本的 Vue 实例
因此,数据控制层其实是对这个 Vue 实例部分功能的一种转写,类似于语法糖
数据控制层写法
例如:
// 数据控制器
export class PIndex extends Pilot {
$data() {
return {
a: 1,
};
}
$computed = {
a2() {},
};
$mounted() {}
onOpenSelector() {}
}
会转换成
// 标准 Vue
const Component = Vue.extend({
data() {
return {
a: 1,
};
},
computed: {
a2() {},
},
methods: {
onOpenSelector() {},
},
mounted() {},
});
更多细节,请参照《数据控制层基类Pilot》
新建页面时,页面初始内容,可参考如下空白模板
H5 界面需要 CPage、CContent、CNavBar 这三个基础页面组件
/**
* pageName - 页面名称
* @author 作者
*/
<template>
<CPage>
<CNavBar title="页面名称" />
<CContent class="page-name">
<!-- 页面内容 -->
</CContent>
</CPage>
</template>
<script>
import Taro from '@tarojs/taro';
import {} from 'taro-ui-vue';
import {
PPageName
} from '@pilots/pilotGroup/PPageName';
import {
CPage,
CContent,
CNavBar
} from '@components/layout/h5Page';
import './pageName.scss';
export default {
name: 'PageName',
components: {},
...new PPageName().createOptions(),
};
</script>
/**
* pageName - 页面名称
* @author 作者
*/
<template>
<view class="page-name">
<!-- 页面内容 -->
</view>
</template>
<script>
import Taro from '@tarojs/taro';
import {} from 'taro-ui-vue';
import {
PPageName
} from '@pilots/pilotGroup/PPageName';
import './pageName.scss';
export default {
name: 'PageName',
components: {},
...new PPageName().createOptions(),
};
</script>
/**
* pageName - 页面名称
* @author 作者
*/
@import "../../../components/common/sassMixin";
.page-name {}
/**
* PPageName - 页面名称
* @author 作者
*/
import Taro from '@tarojs/taro';
import {
Pilot
} from '@components/bases/Pilot';
import {
$fetchCommon
} from '@fetchers/FCommon';
export class PPageName extends Pilot {
$data() {
return {};
}
$mounted() {
this.onLoadDataResource();
}
// 加载用户详情
onLoadDataResource() {
Taro.showLoading();
$fetchCommon.getPageDetail()
.then(res => {
Taro.hideLoading();
if (!res) {
return;
}
// do something
});
}
}
说明:请求异常由请求层的基类自动处理,数据控制层跳过错误的逻辑,只处理请求成功的后续业务
/**
* FCommon - 公用请求集
* @author 作者
*/
import {
Fetcher
} from '@components/bases/Fetcher';
class FCommon extends Fetcher {
constructor() {
super({
// url前缀(本地路径, 服务器路径)
urlPrefix: ['/api/common/', '/serverPath/'],
});
}
// 读取页面详情
getPageDetail() {
const url = this.spellURL('getPageDetail', 'page/Detail');
const send = {};
return this.post(url, send);
}
}
export const $fetchCommon = new FCommon();