diff --git a/components/menu/demo/SubMenu.vue b/components/menu/demo/SubMenu.vue
new file mode 100644
index 000000000..a96a80482
--- /dev/null
+++ b/components/menu/demo/SubMenu.vue
@@ -0,0 +1,12 @@
+
+
+ {{data.attrs.menuInfo.title}}
+
+
+
+ {{item.title}}
+
+
+
+
+
diff --git a/components/menu/demo/index.vue b/components/menu/demo/index.vue
index 2b0a91b6b..5dbdae551 100644
--- a/components/menu/demo/index.vue
+++ b/components/menu/demo/index.vue
@@ -5,6 +5,7 @@ import SiderCurrent from './sider-current'
import SwitchMode from './switch-mode'
import Theme from './theme'
import Vertical from './vertical'
+import Template from './template'
import CN from '../index.zh-CN.md'
import US from '../index.en-US.md'
const md = {
@@ -35,6 +36,7 @@ export default {
+
diff --git a/components/menu/demo/template.md b/components/menu/demo/template.md
new file mode 100644
index 000000000..81ea52016
--- /dev/null
+++ b/components/menu/demo/template.md
@@ -0,0 +1,75 @@
+
+#### 单文件递归菜单
+使用单文件方式递归生成菜单。
+因组件内部会动态更改`a-sub-menu`的属性,如果拆分成单文件,无法将属性挂载到`a-sub-menu`上,你需要自行声明属性并挂载。为了实现方便,避免了属性的声明,本示例将其声明为函数式组件,并将所有属性挂载到`a-sub-menu`上。
+
+
+
+#### Single file recursive menu
+Use the single file method to recursively generate menus.
+The properties of `a-sub-menu` are dynamically changed inside the component. If you split the file into a single file and you cannot mount the `props` to `a-sub-menu`, you need to declare the `props` and mount it yourself. For the sake of convenience, the declaration of the `props` is avoided. This example declares it as a functional component and mounts all properties to `a-sub-menu`.
+
+
+```html
+
+