fes.js/docs/reference/plugin/plugins/model.md

108 lines
2.3 KiB
Markdown
Raw Normal View History

# @fesjs/plugin-model
## 启用方式
2021-03-25 16:04:31 +08:00
在 package.json 中引入依赖:
```json
{
"dependencies": {
"@fesjs/fes": "^2.0.0",
"@fesjs/plugin-model": "^2.0.0"
},
}
```
## 介绍
一种简易的数据管理方案。我们知道 Vue 的理念是用响应式数据驱动UI更新提供 `reactive``ref` 等API把数据变成响应式的。我们使用`Provide / Inject`特性,在应用实例中共享响应式数据。
我们约定`src/models` 目录下的文件为项目定义的 `model` 文件。每个文件需要默认导出一个 `function`
文件名则对应最终 `model``name`,你可以通过插件提供的 `API` 来消费 `model` 中的数据。
### Model 文件
**src/models/useAuthModel.js**
```js
import { reactive } from 'vue'
export default function useAuthModel() {
const user = reactive({});
const signin = ()=>{
// todo
}
const signout = ()=>{
// todo
}
return {
user,
signin,
signout
}
}
```
### 在组件中使用 Model
```vue
<script>
import { useModel } from "@fesjs/fes"
export default {
setup(){
const { user, signin, signout } = useModel("useAuthModel")
}
}
</script>
```
2021-12-14 11:42:49 +08:00
### @@initialState
在`beforeRender`的返回的内容会写入`@@initialState`
```js
export const beforeRender = {
loading: <PageLoading />,
action() {
const { setRole } = access;
return new Promise((resolve) => {
setTimeout(() => {
setRole('admin');
// 初始化应用的全局状态,可以通过 useModel('@@initialState') 获取,具体用法看@/components/UserCenter 文件
resolve({
userName: 'harrywan'
});
}, 1000);
});
}
};
````
然后我们可以在其他组件中使用:
```vue
<template>
<div class="right">{{initialState.userName}}</div>
</template>
<script>
import { useModel } from '@fesjs/fes';
export default {
setup() {
const initialState = useModel('@@initialState');
return {
initialState
};
}
};
</script>
<style scope>
</style>
```
2021-03-25 16:04:31 +08:00
## API
### useModel
2021-03-25 16:04:31 +08:00
**useModel(name)**
- **类型**:函数
- **详情**: 获取 Model 数据,也就是 Model 文件默认导出函数执行的结果。
- **参数**
- name传入 Model 文件名