1

我将 vue 与vue-material一起使用。

我目前正在布局我的 web 应用程序的主要结构,使用作为md-approotmd-[app-]drawer和.md-[app-]toolbarmd-[app-]content

如果我将这些组件直接放在md-app标签中,它们就可以工作。这看起来像这样:

<template>
  <div class="md-layout-row">
    <md-app>
      <md-drawer>
        <md-list>
          <md-list-item>
            <md-icon>people</md-icon>
            <span class="md-list-item-text">Foo</span>
          </md-list-item>

          <md-list-item>
            <md-icon>view_list</md-icon>
            <span class="md-list-item-text">Bar</span>
          </md-list-item>
        </md-list>
      </md-drawer>
    </md-app>
  </div>
</template>

但出于设计目的,我尝试将每个内部部分(在本例中为md-drawer标签)提取到自己的 vue 组件中。

问题

Drawer现在有我的组件,它看起来像这样:

<template>
  <md-drawer>
    <md-list>
      <md-list-item>
        <md-icon>people</md-icon>
        <span class="md-list-item-text">Foo</span>
      </md-list-item>

      <md-list-item>
        <md-icon>view_list</md-icon>
        <span class="md-list-item-text">Bar</span>
      </md-list-item>
    </md-list>
  </md-drawer>
</template>

.. 我的md-app(在导入组件 ofc 之后)现在看起来像这样:

<template>
  <div class="md-layout-row">
    <md-app>
      <MyDrawer />
    </md-app>
  </div>
</template>

但这根本不会渲染抽屉。为什么是这样?Vue 是否额外包装了可能与 vue-material 的 css 混淆的组件?有没有办法绕过/解决这个问题?..还是我只是用错了方法?

加法(编辑 1)

经过一些实验后,我发现如果使用标签环绕MyDrawer标签,它可以工作md-[app-]content,但这不会导致我正在寻找的布局。

我想md-app是专门寻找这些组件,因为它不知道如何处理MyDrawer标签,所以它只是忽略它?虽然MyDrawer本质上是一个md-drawer标签/组件?

加法(编辑 2)

我一直在阅读DOM Template Parsing Caveats,我认为这应该可以工作,但我还没有成功。我刚刚声明了一个标签并从组件<md-drawer is="MyDrawer" />中删除了主包装标签md-drawerMyDrawer

4

1 回答 1

1
  1. 错误地使用组件doc

md-active - 类型 = 布尔值。用于触发抽屉可见性的选项。应该与 .sync 修饰符一起使用。默认 = 假

使用 for 的示例Drawer

<md-drawer :md-active.sync="showNavigation">
  ...
</md-drawer>
  1. md-app不正确。请参阅组件命名约定

使用 for 的示例md-app

<md-app>
  <my-drawer />
</md-app>

*注意 ,但在使用前请查看下一个答案

  1. 加法(编辑 1) - 不正确。

作为 md-app 标记的直接子级传递的任何其他标记都将被忽略。该组件将仅查找这三个标签并为它们选择正确的位置。文档

使用 for 的示例md-app

<md-app md-waterfall md-mode="fixed-last">
  <md-app-toolbar class="md-large md-dense md-primary">
    <div class="md-toolbar-row">
      <div class="md-toolbar-section-start">
        <md-button class="md-icon-button" @click="menuVisible = !menuVisible">
          <md-icon>menu</md-icon>
        </md-button>
        <span class="md-title">My Title</span>
      </div>

      <div class="md-toolbar-section-end">
        <md-button class="md-icon-button">
          <md-icon>more_vert</md-icon>
        </md-button>
      </div>
    </div>

    <div class="md-toolbar-row">
      <md-tabs class="md-primary">
        <md-tab id="tab-home" md-label="Home"></md-tab>
        <md-tab id="tab-pages" md-label="Pages"></md-tab>
      </md-tabs>
    </div>
  </md-app-toolbar>

  <md-app-drawer :md-active.sync="menuVisible">
    <md-toolbar class="md-transparent" md-elevation="0">Navigation</md-toolbar>
    <md-list>
      <md-list-item>
        <md-icon>move_to_inbox</md-icon>
        <span class="md-list-item-text">Inbox</span>
      </md-list-item>
    </md-list>
  </md-app-drawer>

  <md-app-content>
    <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Error quibusdam, non molestias et! Earum magnam, similique, quo recusandae placeat dicta asperiores modi sint ea repudiandae maxime? Quae non explicabo, neque.</p>
  </md-app-content>
</md-app>
  1. 加法(编辑 2) - 不正确。is在你的情况下没关系。请参阅使用 API组件命名约定

只需使用标签:<md-drawer/>

更新

如何Drawermd-app.

drawer必须包裹在md-app-drawer

例子

代码:

<md-app-drawer :md-active.sync="menuVisible">
  <custom-drawer/>
</md-app-drawer>

应用程序

零件

于 2018-02-06T09:05:56.470 回答