@eggjs/视图
彩蛋底部视图插件
它是一个已经内置的用于鸡蛋的插件.
安装
npm i @eggjs/view
使用量
// {app_root}/config/plugin.ts
export default {
view: {
enable: true,
package: '@eggjs/view',
},
};
使用模板引擎
@eggjs/视图 没有内置视图引擎,所以你应该选择一个模板引擎,比如 简况,并安装 蛋景画 插件 .
您可以先选择模板引擎, 链接 简况,所以我们使用 蛋景画 插件 .
egg-view 进入 鸡蛋,所以你只需要配置 蛋景画。 。 。 .
// config/plugin.ts
export default {
ejs: {
enable: true,
package: 'egg-view-ejs',
},
};
配置映射, 文件为 .ejs 扩展将由 ejs 提供.
// config/config.default.ts
export default {
view: {
mapping: {
'.ejs': 'ejs',
},
},
};
在控制器中,你可以打电话 ctx.render。 。 。 .
export default (app: Application) => {
return class UserController extends app.Controller {
async list() {
const { ctx } = this;
await ctx.render('user.ejs');
}
};
}
如果你打电话 ctx.renderString,您应当在视图选项中指定视图引擎.
export default (app: Application) => {
return class UserController extends app.Controller {
async list() {
const { ctx } = this;
ctx.body = await ctx.renderString(
'<%= user %>',
{ user: 'popomore' },
{
viewEngine: 'ejs',
}
);
}
};
}
使用多视图引擎
[egg-view]支持多视图引擎,因此在一个应用程序中可以使用多个模板引擎.
如果您想要添加其它模板引擎, 如 尼姑,然后可以添加 蛋-观-出 插件 .
配置插件和映射
// config/plugin.ts
export default {
ejs: {
enable: true,
package: 'egg-view-ejs',
},
nunjucks: {
enable: true,
package: 'egg-view-nunjucks',
},
};
// config/config.default.ts
export default {
view: {
mapping: {
'.ejs': 'ejs',
'.nj': 'nunjucks',
},
},
};
您可以简单地将文件转换为 .nj 扩展名.
await ctx.render('user.nj');
如何写入视图插件
你用得着 @eggjs/视图用于注册插件的 API .
查看引擎
首先创建视图引擎类, 并执行 render 财务报告和审定财务报表 renderString,如果模板引擎不支持,只需丢出一个错误.
视图引擎为上下文级别,因此在 constructor。 。 。 .
// lib/view.ts
export default class MyView {
constructor(ctx) {
// do some initialize
// get the plugin config from `ctx.app.config`
}
async render(fullpath: string, locals: Record<string, any>) {
return myengine.render(fullpath, locals);
}
async renderString() {
throw new Error('not implement');
}
}
render 财务报告和审定财务报表 renderString 支持生成器函数,同位素函数,或普通函数返回承诺.
如果模板引擎只支持回调,你可以用"承诺"来包接.
class MyView {
render(fullpath, locals) {
return new Promise((resolve, reject) => {
myengine.render(fullpath, locals, (err, result) => {
if (err) {
reject(err);
} else {
resolve(result);
}
});
});
}
}
这些方法有三个论点:, renderString 将会通过 tpl 作为第一个参数而不是名称在 render。 。 。 .
render(name, locals, viewOptions)
- 名称: 可以从 root 中解析的文件路径 (
app/view(默认) - 本地数据: 模板使用的数据
- 视图选项:每次渲染的视图选项,可以覆盖视图默认配置
config/config.default.js。插件如果有配置,则应执行. 执行视图引擎时,您将收到来自render,选项包括:- root: 蛋景会将名称解为完整路径,但在视图选项中将根和名进行分解.
- 名称: 调用时的原名
- 本地: 调用时的原本地人
renderString(tpl, locals, viewOptions)
- tpl: 模板字符串而不是文件, 使用在
renderString - 当地人: 与
render - 视图选项: 与
render
登记册
在定义了视图引擎后,可以注册.
// app.ts
import type { Application } from 'egg';
import MyView from './lib/view';
export default (app: Application) => {
app.view.use('myName', MyView);
}
你可以定义一个视图引擎名称,通常是一个模板名称.
配置
定义插件名称并依赖 @eggjs/视图
{
"eggPlugin": {
"name": "myName",
"dependencies": ["view"]
}
}
设置默认配置 config/config.default.ts,名称等于插件名称.
export default {
myName: {},
};
参见一些例子
配置
根号
根为 ${baseDir}/app/view ,但您可以定义多个目录,由 ,。 。 。 .
@eggjs/视图 将会从所有根目录中找到一个文件.
export default (appInfo: EggAppInfo) => {
const baseDir = appInfo.baseDir;
return {
view: {
root: `${baseDir}/app/view,${baseDir}/app/view2`,
},
};
}
默认扩展
在提交文件时,您应当指定一个扩展名,允许 @eggjs/视图 你知道你想用什么引擎吗.
但是,你可以定义 defaultExtension 不写入扩展名.
// config/config.default.ts
export default {
view: {
defaultExtension: '.html',
},
};
// controller
export default (app: Application) => {
return class UserController extends app.Controller {
async list() {
const { ctx } = this;
// render user.html
await ctx.render('user');
}
}
}
视图引擎和默认视频引擎
使用时 renderString,请在视图配置中指定视图Engine,见上文示例.
不过,你可以定义 defaultViewEngine 不每次设置.
// config/config.default.ts
export default {
view: {
defaultViewEngine: 'ejs',
},
};
见 配置/ 配置. 默认. ts 更详细.
问题和建议
请打开一个问题 这里。 。 。 .
许可证
贡献者
制造的 贡献者-img。 。 。 .