# Sidebar

> 一个可以收缩，展开，悬浮，支持多级子菜单的左侧导航栏

> 请注意， 本页的所有演示代码， 在打开之前，请关闭其他所有激活的示例， 不然会导致 bug。 `NlyAdminlteVue` 只允许一个 `sidebar` 存在，因为本页是文档演示， 使用 `v-if` 渲染多个 `sidebar`， 请保证本页同时只有一个 `sidebar` 被激活

- 左侧导航栏容器， 收起成只有 `icon` 的导航栏，需要 `body` 中有 `class='sidebar-mini sidebar-collapse'`，如果只有 `sidebar-collapse`，则会将左侧导航栏滑到左侧区域外，不可见。`sidebar-collapse` 用来控制左侧导航栏展开收缩。`sidebar-mini` 允许左侧导航栏收起到只有图标的状态

- `nly-sidebar-menu` 和 `nly-sidebar-container` 的收起和展开是由指令 `v-nly-sidebar-collapse` 来实现的，单独使用并无效果。

- `nly-sidebar-menu` 和 `nly-sidebar-container` 的差别在于使用 `nly-sidebar-menu` 可以传入一个数组来渲染菜单， 而 `nly-sidebar-container` 则需要使用嵌套组件一个一个写入。 当然也可以使用 `nly-render-function` 组件来传入数组渲染，详情请查看 [数组渲染页面组件](/docs/components/render-function)

- 下拉菜单元素组件 `nly-sidebar-nav-tree`，默认所有下拉菜单为手风琴模式，如需关闭，请给每个 `nly-sidebar-nav-tree` 设置 `accordion=null`

- 如果需要分组手风琴，请给同一组的 `nly-sidebar-nav-tree` 设置相同的 `accordion`

- 请保证 `nly-sidebar-nav-tree` 的 `target` 唯一, `nly-sidebar-nav-tree` 是通过 `target` 来控制对应元素收起展开的。 且 `target` 并没有设置默认值，多个相同，会导致一起展开收起。

- 如果有多个 `nly-sidebar-nav-tree` 的 `target` 相同，请勿设置 `visible=true`，会导致浏览器崩溃

- 如果有多级导航栏， 需要手风琴模式，请给同一级别的导航元素设置相同的 `accordion`, 不同级别导航 `accordion` 请设置唯一值

- `nly-sidebar-menu` 如果需要自动开启路由匹配模式， 给每一个 `nly-sidebar-nav-tree` 和 `nly-sidebar-nav-item` 传入 `exact: true`, 请不要给设置元素设置 `visible` 属性

- `sidebar` 需要布局容器 `nly-wrapper` 来配合布局， 请设置 `nly-wrappper`， 并使用其四个布局之一，具体请查看 [wrapper 布局](/docs/components/wrapper)

**示例：**

```html
<template>
  <div>
    <div>
      <nly-button block @click="showSidebar" variant="info"
        >点击渲染左侧菜单栏</nly-button
      >
      <nly-button
        block
        v-nly-sidebar-collapse.sidebar-collapse
        class="navItem"
        :disabled="!show"
        bg-variant="pink"
        >点击收起左侧菜单栏</nly-button
      >
    </div>
    <nly-wrapper layout="fixed" v-if="show">
      <nly-sidebar-container hover style="margin-top:66px" side-mini>
        <nly-sidebar-brand to="#-">
          <nly-sidebar-brandimg
            src="http://nly-adminlte-vue-demo.nejinn.com/img/NLYLOGO.b43761e2.png"
            elevation
            circle
          />
          <nly-sidebar-brandtext>NLY Adminlte Vue</nly-sidebar-brandtext>
        </nly-sidebar-brand>

        <nly-sidebar>
          <nly-sidebar-userpanel class="mt-3 pb-3 mb-3 d-flex">
            <nly-sidebar-userpanel-img
              src="http://nly-adminlte-vue-demo.nejinn.com/img/NLYLOGO.b43761e2.png"
              class="SSS"
            />
            <nly-sidebar-userpanel-info to="#-"
              >Nejinn lerity</nly-sidebar-userpanel-info
            >
          </nly-sidebar-userpanel>
          <nly-sidebar-nav class="mt-2">
            <nly-sidebar-nav-header>仪表盘</nly-sidebar-nav-header>
            <nly-sidebar-nav-item
              to="/"
              icon="nav-icon fas nlyfont nly-icon-dashboard"
              exact
            >
              首页
              <nly-badge bg-variant="teal" badge-class="right">NEW</nly-badge>
            </nly-sidebar-nav-item>

            <nly-sidebar-nav-header>
              组件
              <nly-badge bg-variant="maroon" badge-class="float-sm-right"
                >15</nly-badge
              >
            </nly-sidebar-nav-header>

            <nly-sidebar-nav-tree
              target="components-one"
              visible
              icon="nav-icon fas nlyfont nly-icon-logo-polymer"
              text="菜单树"
            >
              <nly-sidebar-nav-item
                to="/"
                icon="nav-icon far nlyfont nly-icon-logo-chrome"
                exact
                >菜单1</nly-sidebar-nav-item
              >

              <nly-sidebar-nav-item
                to="/"
                icon="nav-icon far nlyfont nly-icon-nav-tool"
                exact
                >菜单2</nly-sidebar-nav-item
              >
            </nly-sidebar-nav-tree>

            <nly-sidebar-nav-tree
              target="components-two"
              icon="nav-icon fas nlyfont nly-icon-logo-polymer"
              text="菜单树2"
            >
              <nly-sidebar-nav-item
                to="/"
                icon="nav-icon far nlyfont nly-icon-sr-chanxueyanhezuo-fill"
                exact
                >菜单3</nly-sidebar-nav-item
              >
              <nly-sidebar-nav-tree
                target="components-three"
                accordion="components-three"
                icon="nav-icon fas nlyfont nly-icon-logo-polymer"
                text="菜单树3"
              >
                <nly-sidebar-nav-item
                  to="/"
                  icon="nav-icon far nlyfont nly-icon-sr-chanxueyanhezuo-fill"
                  exact
                  >菜单4</nly-sidebar-nav-item
                >
              </nly-sidebar-nav-tree>
              <nly-sidebar-nav-tree
                target="components-for"
                accordion="components-three"
                icon="nav-icon fas nlyfont nly-icon-logo-polymer"
                text="菜单树4"
              >
                <nly-sidebar-nav-item
                  to="/"
                  icon="nav-icon far nlyfont nly-icon-sr-chanxueyanhezuo-fill"
                  exact
                  >菜单5</nly-sidebar-nav-item
                >
              </nly-sidebar-nav-tree>
            </nly-sidebar-nav-tree>
          </nly-sidebar-nav>
        </nly-sidebar>
      </nly-sidebar-container>
      <nly-overlay v-nly-sidebar-collapse.overlay sidebar />
    </nly-wrapper>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        show: false
      };
    },
    methods: {
      showSidebar() {
        if (this.show) {
          this.show = false;
          // 写这个是为了这里文档演示效果，清除掉 body 的 class， 因为 NlyAdminlteVue 是用 body 来控制菜单栏的
          const bodyClassName = (document.body.className = "");
        } else {
          this.show = true;
        }
      }
    }
  };
</script>
<!-- sidebar.name -->
<!-- sidebar.vue -->
```

## 路由跳转

点击 `nly-sidebar-nav-item` 和 `nly-sidebar-nav-tree` 可以跳转到对应的路由。

设置 `to` prop 可以给组件传入对应的路由，可以是 `String` 或者 `key=value Object`。 比如 `/sidebar` 或者 `{name: sidebar}` 。 设置 `to` 的时候， 路由跳转是 `router-link router.push()`

设置 `replace` 为 `true` 会使路由跳转变成 `router-link router.replace()`

设置 `append` 为 `true` 会把 `to` 指向的路由添加到当前路由后面，再进行跳转

设置 `active` 为 `true`， 或使得`nly-sidebar-nav-item` 和 `nly-sidebar-nav-tree` 处于激活状态

设置 `active-class` 可以自定义路由激活状态的 css 类

设置 `exact` 为 `true` 会开启路由匹配模式， 如果当前路由与 `to` 指向的路由是相同的，则会使得 `nly-sidebar-nav-item` 和 `nly-sidebar-nav-tree` 处于激活状态

设置 `exact-active-class` 可以自定义路由匹配激活状态的 css 类

## 手风琴模式

`nly-sidebar-nav-tree` 可以设置手风琴模式， prop `accordion` 可以用来控制手风琴分组。 默认值是 `nly-sidebar-accordion`。 如果不需要手风琴模式，请设置 `accordion` 为 `null`。

如果需要给不同级别的 `nly-sidebar-nav-tree` 开启手风琴模式， 请给不同级别的 tree 设置不同的 `accordion` 值， 且给同一级别的 tree 设置 相同的 `accordion` 值。

`target` prop 是必传参数， 请保证 `nly-sidebar-nav-tree` 的 `target` 唯一, `nly-sidebar-nav-tree` 是通过 `target` 来控制对应元素收起展开的。 且 `target` 并没有设置默认值，多个相同，会导致一起展开收起。

`nly-sidebar-nav-tree` 中嵌入了一个 `nly-link` 组件， 关于 `to`, `repalce`, `active` 等 prop 跟 `nly-link` 用法是一样的， 具体请查看 [`nly-link`](/docs/components/link)

可以设置 `visible` prop 为 `true` 来使得 `nly-sidebar-nav-tree` 默认展开, 如果是手风琴模式， 请不要同时设置多个 `visible` prop 为 `true`，请保证只有 `visible` prop 为 `true`。

可以设置 `appear` prop 来设置初始渲染动画

avtive prop 可以设置当前 `nly-sidebar-nav-tree` 的激活状态

### 非手风琴模式

如果不需要手风琴模式，请设置 `accordion` 为 `null` 或者为不同的值

```html
<template>
  <div>
    <div>
      <nly-button block @click="showSidebar" variant="info"
        >点击渲染左侧菜单栏</nly-button
      >
      <nly-button
        block
        v-nly-sidebar-collapse.sidebar-collapse
        class="navItem"
        :disabled="!show"
        bg-variant="pink"
        >点击收起左侧菜单栏</nly-button
      >
    </div>
    <nly-wrapper layout="fixed" v-if="show">
      <nly-sidebar-container hover style="margin-top:66px" side-mini>
        <nly-sidebar-brand to="#-">
          <nly-sidebar-brandimg
            src="http://nly-adminlte-vue-demo.nejinn.com/img/NLYLOGO.b43761e2.png"
            elevation
            circle
          />
          <nly-sidebar-brandtext>NLY Adminlte Vue</nly-sidebar-brandtext>
        </nly-sidebar-brand>

        <nly-sidebar>
          <nly-sidebar-userpanel class="mt-3 pb-3 mb-3 d-flex">
            <nly-sidebar-userpanel-img
              src="http://nly-adminlte-vue-demo.nejinn.com/img/NLYLOGO.b43761e2.png"
              class="SSS"
            />
            <nly-sidebar-userpanel-info to="#-"
              >Nejinn lerity</nly-sidebar-userpanel-info
            >
          </nly-sidebar-userpanel>
          <nly-sidebar-nav class="mt-2">
            <nly-sidebar-nav-tree
              target="components-one"
              visible
              active
              accordion="components-one"
              appear
              icon="nav-icon fas nlyfont nly-icon-logo-polymer"
              text="非手风琴1"
            >
              <nly-sidebar-nav-item
                to="/"
                icon="nav-icon far nlyfont nly-icon-logo-chrome"
                exact
                >菜单1</nly-sidebar-nav-item
              >
            </nly-sidebar-nav-tree>
            <nly-sidebar-nav-tree
              target="components-two"
              accordion="components-two"
              appear
              icon="nav-icon fas nlyfont nly-icon-logo-polymer"
              text="非手风琴2"
            >
              <nly-sidebar-nav-item
                to="/"
                icon="nav-icon far nlyfont nly-icon-sr-chanxueyanhezuo-fill"
                exact
                >菜单5</nly-sidebar-nav-item
              >
            </nly-sidebar-nav-tree>
          </nly-sidebar-nav>
        </nly-sidebar>
      </nly-sidebar-container>
      <nly-overlay v-nly-sidebar-collapse.overlay sidebar />
    </nly-wrapper>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        show: false
      };
    },
    methods: {
      showSidebar() {
        if (this.show) {
          this.show = false;
          // 写这个是为了这里文档演示效果，清除掉 body 的 class， 因为 NlyAdminlteVue 是用 body 来控制菜单栏的
          const bodyClassName = (document.body.className = "");
        } else {
          this.show = true;
        }
      }
    }
  };
</script>
<!-- sidebar.name -->
<!-- sidebar.vue -->
```

### 手风琴模式

默认手风琴模式：

```html
<template>
  <div>
    <div>
      <nly-button block @click="showSidebar" variant="info"
        >点击渲染左侧菜单栏</nly-button
      >
      <nly-button
        block
        v-nly-sidebar-collapse.sidebar-collapse
        class="navItem"
        :disabled="!show"
        bg-variant="pink"
        >点击收起左侧菜单栏</nly-button
      >
    </div>
    <nly-wrapper layout="fixed" v-if="show">
      <nly-sidebar-container hover style="margin-top:66px" side-mini>
        <nly-sidebar-brand to="#-">
          <nly-sidebar-brandimg
            src="http://nly-adminlte-vue-demo.nejinn.com/img/NLYLOGO.b43761e2.png"
            elevation
            circle
          />
          <nly-sidebar-brandtext>NLY Adminlte Vue</nly-sidebar-brandtext>
        </nly-sidebar-brand>

        <nly-sidebar>
          <nly-sidebar-userpanel class="mt-3 pb-3 mb-3 d-flex">
            <nly-sidebar-userpanel-img
              src="http://nly-adminlte-vue-demo.nejinn.com/img/NLYLOGO.b43761e2.png"
              class="SSS"
            />
            <nly-sidebar-userpanel-info to="#-"
              >Nejinn lerity</nly-sidebar-userpanel-info
            >
          </nly-sidebar-userpanel>
          <nly-sidebar-nav class="mt-2">
            <nly-sidebar-nav-tree
              target="components-one"
              visible
              active
              appear
              icon="nav-icon fas nlyfont nly-icon-logo-polymer"
              text="手风琴1"
            >
              <nly-sidebar-nav-item
                to="/"
                icon="nav-icon far nlyfont nly-icon-logo-chrome"
                exact
                >菜单1</nly-sidebar-nav-item
              >
            </nly-sidebar-nav-tree>
            <nly-sidebar-nav-tree
              target="components-two"
              appear
              icon="nav-icon fas nlyfont nly-icon-logo-polymer"
              text="手风琴2"
            >
              <nly-sidebar-nav-item
                to="/"
                icon="nav-icon far nlyfont nly-icon-sr-chanxueyanhezuo-fill"
                exact
                >菜单5</nly-sidebar-nav-item
              >
            </nly-sidebar-nav-tree>
          </nly-sidebar-nav>
        </nly-sidebar>
      </nly-sidebar-container>
      <nly-overlay v-nly-sidebar-collapse.overlay sidebar />
    </nly-wrapper>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        show: false
      };
    },
    methods: {
      showSidebar() {
        if (this.show) {
          this.show = false;
          // 写这个是为了这里文档演示效果，清除掉 body 的 class， 因为 NlyAdminlteVue 是用 body 来控制菜单栏的
          const bodyClassName = (document.body.className = "");
        } else {
          this.show = true;
        }
      }
    }
  };
</script>
<!-- sidebar.name -->
<!-- sidebar.vue -->
```

多级手风琴模式：

```html
<template>
  <div>
    <div>
      <nly-button block @click="showSidebar" variant="info"
        >点击渲染左侧菜单栏</nly-button
      >
      <nly-button
        block
        v-nly-sidebar-collapse.sidebar-collapse
        class="navItem"
        :disabled="!show"
        bg-variant="pink"
        >点击收起左侧菜单栏</nly-button
      >
    </div>
    <nly-wrapper layout="fixed" v-if="show">
      <nly-sidebar-container hover style="margin-top:66px" side-mini>
        <nly-sidebar-brand to="#-">
          <nly-sidebar-brandimg
            src="http://nly-adminlte-vue-demo.nejinn.com/img/NLYLOGO.b43761e2.png"
            elevation
            circle
          />
          <nly-sidebar-brandtext>NLY Adminlte Vue</nly-sidebar-brandtext>
        </nly-sidebar-brand>

        <nly-sidebar>
          <nly-sidebar-userpanel class="mt-3 pb-3 mb-3 d-flex">
            <nly-sidebar-userpanel-img
              src="http://nly-adminlte-vue-demo.nejinn.com/img/NLYLOGO.b43761e2.png"
              class="SSS"
            />
            <nly-sidebar-userpanel-info to="#-"
              >Nejinn lerity</nly-sidebar-userpanel-info
            >
          </nly-sidebar-userpanel>
          <nly-sidebar-nav class="mt-2">
            <nly-sidebar-nav-tree
              target="components-one"
              visible
              active
              appear
              icon="nav-icon fas nlyfont nly-icon-logo-polymer"
              text="手风琴1"
            >
              <nly-sidebar-nav-item
                to="/"
                icon="nav-icon far nlyfont nly-icon-logo-chrome"
                exact
                >菜单1</nly-sidebar-nav-item
              >
            </nly-sidebar-nav-tree>
            <nly-sidebar-nav-tree
              target="components-two"
              appear
              icon="nav-icon fas nlyfont nly-icon-logo-polymer"
              text="手风琴2"
            >
              <nly-sidebar-nav-item
                to="/"
                icon="nav-icon far nlyfont nly-icon-sr-chanxueyanhezuo-fill"
                exact
                >菜单5</nly-sidebar-nav-item
              >
              <nly-sidebar-nav-tree
                target="components-three"
                appear
                accordion="level-2"
                icon="nav-icon fas nlyfont nly-icon-logo-polymer"
                text="手风琴3"
              >
                <nly-sidebar-nav-item
                  to="/"
                  icon="nav-icon far nlyfont nly-icon-sr-chanxueyanhezuo-fill"
                  exact
                  >菜单5</nly-sidebar-nav-item
                >
              </nly-sidebar-nav-tree>
              <nly-sidebar-nav-tree
                target="components-four"
                appear
                accordion="level-2"
                icon="nav-icon fas nlyfont nly-icon-logo-polymer"
                text="手风琴4"
              >
                <nly-sidebar-nav-item
                  to="/"
                  icon="nav-icon far nlyfont nly-icon-sr-chanxueyanhezuo-fill"
                  exact
                  >菜单5</nly-sidebar-nav-item
                >
              </nly-sidebar-nav-tree>
            </nly-sidebar-nav-tree>
          </nly-sidebar-nav>
        </nly-sidebar>
      </nly-sidebar-container>
      <nly-overlay v-nly-sidebar-collapse.overlay sidebar />
    </nly-wrapper>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        show: false
      };
    },
    methods: {
      showSidebar() {
        if (this.show) {
          this.show = false;
          // 写这个是为了这里文档演示效果，清除掉 body 的 class， 因为 NlyAdminlteVue 是用 body 来控制菜单栏的
          const bodyClassName = (document.body.className = "");
        } else {
          this.show = true;
        }
      }
    }
  };
</script>
<!-- sidebar.name -->
<!-- sidebar.vue -->
```

## 菜单标题

可以使用 `nly-sidebar-nav-header` 设置菜单 title 来给菜单进行分组

```html
<template>
  <div>
    <div>
      <nly-button block @click="showSidebar" variant="info"
        >点击渲染左侧菜单栏</nly-button
      >
      <nly-button
        block
        v-nly-sidebar-collapse.sidebar-collapse
        class="navItem"
        :disabled="!show"
        bg-variant="pink"
        >点击收起左侧菜单栏</nly-button
      >
    </div>
    <nly-wrapper layout="fixed" v-if="show">
      <nly-sidebar-container hover style="margin-top:66px" side-mini>
        <nly-sidebar-brand to="#-">
          <nly-sidebar-brandimg
            src="http://nly-adminlte-vue-demo.nejinn.com/img/NLYLOGO.b43761e2.png"
            elevation
            circle
          />
          <nly-sidebar-brandtext>NLY Adminlte Vue</nly-sidebar-brandtext>
        </nly-sidebar-brand>

        <nly-sidebar>
          <nly-sidebar-userpanel class="mt-3 pb-3 mb-3 d-flex">
            <nly-sidebar-userpanel-img
              src="http://nly-adminlte-vue-demo.nejinn.com/img/NLYLOGO.b43761e2.png"
              class="SSS"
            />
            <nly-sidebar-userpanel-info to="#-"
              >Nejinn lerity</nly-sidebar-userpanel-info
            >
          </nly-sidebar-userpanel>
          <nly-sidebar-nav class="mt-2">
            <nly-sidebar-nav-header>分组0 </nly-sidebar-nav-header>
            <nly-sidebar-nav-item
              to="/"
              icon="nav-icon far nlyfont nly-icon-logo-chrome"
              exact
              >首页</nly-sidebar-nav-item
            >
            <nly-sidebar-nav-header>分组1 </nly-sidebar-nav-header>
            <nly-sidebar-nav-tree
              target="components-one"
              visible
              active
              appear
              icon="nav-icon fas nlyfont nly-icon-logo-polymer"
              text="分组1"
            >
              <nly-sidebar-nav-item
                to="/"
                icon="nav-icon far nlyfont nly-icon-logo-chrome"
                exact
                >菜单1</nly-sidebar-nav-item
              >
            </nly-sidebar-nav-tree>
            <nly-sidebar-nav-header>分组2 </nly-sidebar-nav-header>
            <nly-sidebar-nav-tree
              target="components-two"
              appear
              icon="nav-icon fas nlyfont nly-icon-logo-polymer"
              text="分组2"
            >
              <nly-sidebar-nav-item
                to="/"
                icon="nav-icon far nlyfont nly-icon-sr-chanxueyanhezuo-fill"
                exact
                >菜单5</nly-sidebar-nav-item
              >
            </nly-sidebar-nav-tree>
          </nly-sidebar-nav>
        </nly-sidebar>
      </nly-sidebar-container>
      <nly-overlay v-nly-sidebar-collapse.overlay sidebar />
    </nly-wrapper>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        show: false
      };
    },
    methods: {
      showSidebar() {
        if (this.show) {
          this.show = false;
          // 写这个是为了这里文档演示效果，清除掉 body 的 class， 因为 NlyAdminlteVue 是用 body 来控制菜单栏的
          const bodyClassName = (document.body.className = "");
        } else {
          this.show = true;
        }
      }
    }
  };
</script>
<!-- sidebar.name -->
<!-- sidebar.vue -->
```

## 数组渲染 sidebar

`nly-sidebar-menu` 是一个接受数组，渲染 `sidebar` 的组件。

`sidebarList` 是接收渲染数组的 prop。通常格式如下：

```js
sidebarList: [
  {
    _type: "nly-sidebar-nav",
    _class: "mt-2",
    dataGroup: "zero",
    _key: "one",
    exact: true,
    _children: [
      {
        _type: "nly-sidebar-nav-item",
        _name: "一级菜单 item 1",
        icon: "nav-icon fas nlyfont nly-icon-dashboard",
        exact: true,
        exactActiveClass: "active",
        dataGroup: "one",
        _key: "two",
        to: { name: "SidebarMenuExact1" }
      },
      {
        _type: "nly-sidebar-nav-tree",
        target: "components-two",
        icon: "nav-icon fas nlyfont nly-icon-dashboard",
        text: "一级菜单 tree 1",
        dataGroup: "one",
        _key: "three",
        exact: true,
        _children: [
          {
            _type: "nly-sidebar-nav-item",
            _name: "二级菜单 item 1",
            icon: "nav-icon fas nlyfont nly-icon-logo-polymer",
            exact: true,
            exactActiveClass: "active",
            dataGroup: "three",
            _key: "five",
            to: { name: "SidebarMenuExact2" }
          }
        ]
      },
      {
        _type: "nly-sidebar-nav-tree",
        target: "components-three",
        icon: "nav-icon fas nlyfont nly-icon-dashboard",
        text: "一级菜单 tree 2",
        dataGroup: "one",
        _key: "four",
        exact: true,
        _children: [
          {
            _type: "nly-sidebar-nav-item",
            _name: "二级菜单 item 2",
            icon: "nav-icon fas nlyfont nly-icon-logo-polymer",
            exact: true,
            exactActiveClass: "active",
            to: { name: "SidebarMenuExact3" },
            dataGroup: "four",
            _key: "six"
          },
          {
            _type: "nly-sidebar-nav-item",
            _name: "二级菜单 item 3",
            icon: "nav-icon fas nlyfont nly-icon-logo-polymer",
            exact: true,
            exactActiveClass: "active",
            to: { name: "SidebarMenuExact4" },
            dataGroup: "four",
            _key: "seven"
          },
          {
            _type: "nly-sidebar-nav-tree",
            target: "components-four",
            accordion: "sss",
            icon: "nav-icon fas nlyfont nly-icon-logo-polymer",
            text: "二级菜单 tree 1",
            dataGroup: "four",
            _key: "eight",
            exact: true,
            _children: [
              {
                _type: "nly-sidebar-nav-item",
                _name: "三级菜单 item 1",
                icon: "nav-icon fas nlyfont nly-icon-logo-aperture",
                exact: true,
                exactActiveClass: "active",
                to: { name: "SidebarMenuExact5" },
                dataGroup: "eight",
                _key: "nine"
              }
            ]
          },
          {
            _type: "nly-sidebar-nav-tree",
            target: "components-five",
            accordion: "sss",
            icon: "nav-icon fas nlyfont nly-icon-logo-polymer",
            text: "二级菜单 tree 2",
            dataGroup: "four",
            _key: "ten",
            exact: true,
            _children: [
              {
                _type: "nly-sidebar-nav-item",
                _name: "三级菜单 item 2",
                icon: "nav-icon fas nlyfont nly-icon-logo-aperture",
                exact: true,
                exactActiveClass: "active",
                to: { name: "SidebarMenuExact6" },
                dataGroup: "ten",
                _key: "11"
              },
              {
                _type: "nly-sidebar-nav-tree",
                target: "components-six",
                accordion: "ssss",
                icon: "nav-icon fas nlyfont nly-icon-logo-aperture",
                text: "三级菜单 tree 1",
                dataGroup: "ten",
                _key: "12",
                exact: true,
                _children: [
                  {
                    _type: "nly-sidebar-nav-item",
                    _name: "四级菜单",
                    icon: "nav-icon fas nlyfont nly-icon-logo-pinterest",
                    exact: true,
                    exactActiveClass: "active",
                    to: { name: "SidebarMenuExact7" },
                    dataGroup: "12",
                    _key: "13"
                  }
                ]
              }
            ]
          }
        ]
      }
    ]
  }
];
```

`sidebarList` 支持的属性如下：

- `_type`, 组件名称或者 html 标签字符串

- `_name`, 插入到组件默认插槽的文本

- `attrs`, attrs 属性

- `directives`, 指令，但并不是所有的指令都支持，只支持 jsx 支持的指令

- `on`, 函数事件

- `nativeOn`, 原生函数事件

- `class`, css 类名

- `style`, 式样对象

- `domProps`, dom 参数

- `scopedSlots`, 作用于插槽

- `slot`, 插槽

- `key`, `vue :key`

- `ref`, `ref` 属性

- `refInFor`,

- `id`, dom 的 id

- `prop` name, 组件 prop， 比如上列中的 `to` prop, `exact` prop

其中 `_type` 为 `nly-sidebar-nav-tree` 的时候额外支持属性：

- `dataGroup`, 父组件的 `vue :key` 值

`nly-sidebar-menu` 支持全路由自动匹配激活模式， 配置该模式， `nly-sidebar-nav-item` 节点会自动激活，且此节点的父元素如果是 `nly-sidebar-nav-tree` 会自动激活且展开。

- 开启自动匹配激活模式的时候， 需要给 `nly-sidebar-nav-tree`, `nly-sidebar-nav-item` 传入属性`dataGroup`。

点击查看 [`demo`](http://nly-adminlte-vue-demo.nejinn.com/#/sidebar-menu-exact), demo 代码如下：

```html
<template>
  <nly-wrapper layout="fixed">
    <nly-wrapper-header style="height:57px">
      <nly-button v-nly-sidebar-collapse.sidebar-collapse>点击收起</nly-button>
    </nly-wrapper-header>
    <nly-sidebar-menu :sidebarList="sidebarList" side-mini exact />
    <router-view />
    <nly-wrapper-footer style="height:57px">footer</nly-wrapper-footer>
    <nly-overlay v-nly-sidebar-collapse.overlay sidebar />
  </nly-wrapper>
</template>

<script>
  export default {
    data() {
      return {
        sidebarList: [
          {
            _type: "nly-sidebar-nav",
            _class: "mt-2",
            dataGroup: "zero",
            _key: "one",
            exact: true,
            "child-indent": true,
            _children: [
              {
                _type: "nly-sidebar-nav-item",
                _name: "一级菜单 item 1",
                icon: "nav-icon fas nlyfont nly-icon-dashboard",
                exact: true,
                exactActiveClass: "active",
                dataGroup: "one",
                _key: "two",
                to: { name: "SidebarMenuExact1" }
              },
              {
                _type: "nly-sidebar-nav-tree",
                target: "components-two",
                icon: "nav-icon fas nlyfont nly-icon-dashboard",
                text: "一级菜单 tree 1",
                dataGroup: "one",
                _key: "three",
                exact: true,
                _children: [
                  {
                    _type: "template",
                    _slot: "linktool",
                    _children: [
                      {
                        _name: `1`,
                        _type: "nly-badge",
                        variant: "info",
                        badgeClass: "right"
                      }
                    ]
                  },
                  {
                    _type: "nly-sidebar-nav-item",
                    _name: "二级菜单 item 1",
                    icon: "nav-icon fas nlyfont nly-icon-logo-polymer",
                    exact: true,
                    exactActiveClass: "active",
                    dataGroup: "three",
                    _key: "five",
                    to: { name: "SidebarMenuExact2" }
                  }
                ]
              },
              {
                _type: "nly-sidebar-nav-tree",
                target: "components-three",
                icon: "nav-icon fas nlyfont nly-icon-dashboard",
                text: "一级菜单 tree 2",
                dataGroup: "one",
                _key: "four",
                exact: true,
                _children: [
                  {
                    _type: "nly-sidebar-nav-item",
                    _name: "二级菜单 item 2",
                    icon: "nav-icon fas nlyfont nly-icon-logo-polymer",
                    exact: true,
                    exactActiveClass: "active",
                    to: { name: "SidebarMenuExact3" },
                    dataGroup: "four",
                    _key: "six"
                  },
                  {
                    _type: "nly-sidebar-nav-item",
                    _name: "二级菜单 item 3",
                    icon: "nav-icon fas nlyfont nly-icon-logo-polymer",
                    exact: true,
                    exactActiveClass: "active",
                    to: { name: "SidebarMenuExact4" },
                    dataGroup: "four",
                    _key: "seven"
                  },
                  {
                    _type: "nly-sidebar-nav-tree",
                    target: "components-four",
                    accordion: "sss",
                    icon: "nav-icon fas nlyfont nly-icon-logo-polymer",
                    text: "二级菜单 tree 1",
                    dataGroup: "four",
                    _key: "eight",
                    exact: true,
                    _children: [
                      {
                        _type: "nly-sidebar-nav-item",
                        _name: "三级菜单 item 1",
                        icon: "nav-icon fas nlyfont nly-icon-logo-aperture",
                        exact: true,
                        exactActiveClass: "active",
                        to: { name: "SidebarMenuExact5" },
                        dataGroup: "eight",
                        _key: "nine"
                      }
                    ]
                  },
                  {
                    _type: "nly-sidebar-nav-tree",
                    target: "components-five",
                    accordion: "sss",
                    icon: "nav-icon fas nlyfont nly-icon-logo-polymer",
                    text: "二级菜单 tree 2",
                    dataGroup: "four",
                    _key: "ten",
                    exact: true,
                    _children: [
                      {
                        _type: "nly-sidebar-nav-item",
                        _name: "三级菜单 item 2",
                        icon: "nav-icon fas nlyfont nly-icon-logo-aperture",
                        exact: true,
                        exactActiveClass: "active",
                        to: { name: "SidebarMenuExact6" },
                        dataGroup: "ten",
                        _key: "oneone"
                      },
                      {
                        _type: "nly-sidebar-nav-tree",
                        target: "components-six",
                        accordion: "ssss",
                        icon: "nav-icon fas nlyfont nly-icon-logo-aperture",
                        text: "三级菜单 tree 1",
                        dataGroup: "ten",
                        _key: "onetwo",
                        exact: true,
                        _children: [
                          {
                            _type: "nly-sidebar-nav-item",
                            _name: "四级菜单",
                            icon:
                              "nav-icon fas nlyfont nly-icon-logo-pinterest",
                            exact: true,
                            exactActiveClass: "active",
                            to: { name: "SidebarMenuExact7" },
                            dataGroup: "onetwo",
                            _key: "onethree"
                          }
                        ]
                      }
                    ]
                  }
                ]
              }
            ]
          }
        ]
      };
    }
  };
</script>
```
