布局组件(抽屉,工具栏,...)不作为组件工作

时间:2018-02-06 05:55:23

标签: javascript vue.js vuejs2 vue-component vue-material

我正在使用vue vue-material

我目前正在使用md-app作为md-[app-]drawermd-[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 Compnonent,它看起来像这样:

<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-drawer组件

中删除了主要包裹MyDrawer标记

1 个答案:

答案 0 :(得分:1)

  1. 错误地使用该组件doc
  2.   

    md-active - type = Boolean。用于触发抽屉可见性的选项。应与.sync修饰符一起使用。默认= false

    使用Drawer的示例:

    <md-drawer :md-active.sync="showNavigation">
      ...
    </md-drawer>
    
    1. md-app不正确。见Component-Naming-Conventions
    2. 使用md-app的示例:

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

      * note 但在使用之前请查看下一个答案

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

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

        使用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无关紧要。 see using APIComponent-Naming-Conventions
        2. 只需使用代码:<md-drawer/>

          <强>更新

          如何在Drawer中使用自定义md-app

          drawer必须包含在md-app-drawer

          实施例

          代码:

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

          App

          Component