角度材质:整页标签大小

时间:2015-08-03 16:32:04

标签: html css angularjs angular-material

我试图占据整页的空间但我似乎无法在角度材料0.10.0上获得标签的高度,除非我添加.ng-scope { height: 100%; }

有没有更好的方法来实现整页标签?

完整的测试代码:(和here

<!DOCTYPE html><meta charset="utf-8">
<html ng-app="app" ng-controller="appController">
<head>
    <title>Test</title>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.min.js"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular-animate.min.js"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular-route.min.js"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular-aria.min.js"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular-messages.min.js"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/angular_material/0.10.0/angular-material.min.js"></script>
    <link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/angular_material/0.10.0/angular-material.min.css">
    <script>
        var app_module = angular.module('app', ['ngMaterial']);
        var app = document.querySelector('[ng-app=app]');

        app_module.controller('appController', function ($scope) {});
        app_module.config(function($mdThemingProvider) {
            $mdThemingProvider.theme("default").primaryPalette('grey').accentPalette("indigo").dark();
        });
    </script>
</head>

<body layout="column">

<md-tabs flex layout="column" class="md-accent" style="background:red">
    <md-tab flex layout="column" label="A" style="background:green">
        <div flex style="background:blue">A</div>
    </md-tab>
    <md-tab label="B">
        <div flex style="background:cyan">B</div>
    </md-tab>
</md-tabs>

</body>
</html>

我必须补充说它在0.9.0

上工作正常

5 个答案:

答案 0 :(得分:12)

您需要使用角度材质&#39; layout-fill&#39;属性。

layout-fill强制layout元素填充其父容器

<body layout="column">

  <md-tabs flex layout="column" layout-fill class="md-accent" style="background:red" >

    <md-tab flex layout="column" label="A" style="background:green">
      <md-tab-content flex style="background:blue" layout-fill>A</md-tab-content>
    </md-tab>

    <md-tab label="B" layout-fill>
      <md-tab-content flex style="background:cyan" layout-fill>B</md-tab-content>
    </md-tab>

  </md-tabs>

</body>

Plunker Here

答案 1 :(得分:3)

来自@nitin的解决方案对我不起作用可能导致我正在使用的角度材料的版本。我的解决方案是将md-dynamic-height属性添加到md-tabs标记。

根据此issue

答案 2 :(得分:1)

这可以通过将以下属性添加到md-tabs元素来实现:

md-tabs md-stretch-tabs =“是”

答案 3 :(得分:0)

不是更好的方式。您是否有理由不想在.ng-scope上使用100%高度?

对于初学者来说,高度100%通常很难掌握(不是说你的),因为它很少表现得像预期的那样。有一个使用viewport units的规范,但每次发言并不是更好或更差。

答案 4 :(得分:-1)

以下是设法使getmd-tabs占据完整可用高度的方法。

首先注意一些事项:

  1. AFIK我不可能通过现有的md属性来做到这一点(我花了几个小时研究这个)

  2. 团队不会很快修复它(请参阅2016年6月10日ThomasBurleson的评论:https://github.com/angular/material/issues/2254

  3. 解决方案:

    确保每个父元素都具有layout="column"layout-fill属性     (或layout-columnlayout-fill类)。这包括     <ng-outlet>如果这与您的用例相关。

    关于通过组合路由器创建的定制组件的重要说明:

    在我的情况下,我的html结构是ng-outlet - &gt; custom-component - &gt; md-card - &gt; MD-突片

    我将layout="column"layout-fill添加到<ng-outlet><md-card>,并将layout="column"添加到<md-tabs>。但是,我找不到添加它们的方法<account-component>(因为它是由Angular动态创建的)所以我最终要做的是将这个(有点hacky)代码添加到我的组件控制器(ES6,但即使是你写ES5):

    import template from './account.html';
    
    export const accountComponent = {
        template: template,
        controller: accountController,
    };
    
    /*@ngInject*/
    function accountController (accountService) {
        this.data = accountService.getAccountData();
    
        /*** THIS IS THE HACKY PART THAT SOLVED IT FOR ME: ***/
        this.$routerOnActivate = function () { // nextRoute
            const classes = document.querySelector('account-component').classList;
            classes.add('layout-column');
            classes.add('layout-fill');
        };
    }