diff --git a/src/router/modules/demo.ts b/src/router/modules/demo.ts
index f2613b7..fe04669 100644
--- a/src/router/modules/demo.ts
+++ b/src/router/modules/demo.ts
@@ -98,6 +98,10 @@ const titleArr = [
key: 'reg',
title: '正则表达式',
},
+ {
+ key: 'templateReuse',
+ title: '在单一vue组件内实现模板复用(非jsx版本)',
+ },
];
// @/views/demo/**/*.vue
diff --git a/src/views/demo/templateReuse/index.js b/src/views/demo/templateReuse/index.js
new file mode 100644
index 0000000..87cd315
--- /dev/null
+++ b/src/views/demo/templateReuse/index.js
@@ -0,0 +1,29 @@
+export function creatTemplateReuse() {
+ let render = [];
+
+ const DefineTemplate = {
+ setup(_, { slots }) {
+ console.log(slots);
+ // render = slots.default;
+ for (let key in slots) {
+ render.push({
+ slotName: key,
+ render: slots[key],
+ });
+ }
+ return () => {};
+ },
+ };
+
+ const useTemplate = (props) => {
+ console.log(props);
+ let renderList = [];
+ props.slotName.forEach((name) => {
+ let chooseItem = render.find((item) => item.slotName === name);
+ renderList.push(chooseItem.render(props));
+ });
+ return renderList;
+ };
+
+ return [DefineTemplate, useTemplate];
+}
diff --git a/src/views/demo/templateReuse/index.vue b/src/views/demo/templateReuse/index.vue
new file mode 100644
index 0000000..985063b
--- /dev/null
+++ b/src/views/demo/templateReuse/index.vue
@@ -0,0 +1,90 @@
+
+
+
+
+
+
+
+
{{ title }}
+
{{ content }}
+
+
+
+
+
+
{{ title }}: header
+
{{ content }}
+
+
+
+
+
{{ title }}: footer
+
{{ content }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/demo/templateReuse/templateReuse.md b/src/views/demo/templateReuse/templateReuse.md
new file mode 100644
index 0000000..29f4f73
--- /dev/null
+++ b/src/views/demo/templateReuse/templateReuse.md
@@ -0,0 +1,71 @@
+## 在单一vue组件内实现模板复用(非jsx版本)
+
+关联文章,[使用jsx](/#/demo/jsx)
+
+### 注意事项
+* `定义的模版必须放置在使用之前,遵循代码执行顺序`
+* `复杂版本将render渲染的slot存为了一个数组,使用的时候必须传入数组类型的slotName,这样在使用useTemplate函数时才知道该渲染哪个模版`
+* `简单版本可以直接v-slot,默认使用defalut`
+
+### 简单版本源代码
+```vue
+
+
+
+
+
{{ title }}
+
{{ content }}
+
+
+
+
+
+
+
+
+
+
+```
+
+```javascript
+export function creatTemplateReuse() {
+ let render;
+
+ const DefineTemplate = {
+ setup(_, { slots }) {
+ console.log(slots);
+ render = slots.default;
+ return () => {};
+ },
+ };
+
+ const useTemplate = (props) => {
+ return render(props);
+ };
+
+ return [DefineTemplate, useTemplate];
+}
+```
+
+## 下面是复杂模版的效果,代码请查看vue文件
\ No newline at end of file