Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Are Layout Directives supported by Angular 2 Material Design Components?

I'm trying to use the Angular2 Material Design components, and I can't get any of the layout directives to work. Example:

According to the examples, this should "just work":

<div layout="row">   <div flex>First item in row</div>   <div flex>Second item in row</div> </div> <div layout="column">   <div flex>First item in column</div>   <div flex>Second item in column</div> </div> 

But it doesn't - it just renders the elements on the page as plain old divs. (I'm using the latest version of Chrome).

Am I missing something, like is there a CSS file I'm supposed to import?

like image 490
Marcel Lamothe Avatar asked May 15 '16 23:05

Marcel Lamothe


People also ask

What is Flex layout in angular material?

Angular Flex-Layout is a stand-alone library developed by the Angular team for designing sophisticated layouts. When creating an HTML page in Angular, using Angular Flex-Layout allows us to easily create FlexBox-based page layouts with a set of directives available for use in your templates.

What is angular layout?

Angular flex-layout is a stand-alone library developed by the Angular team for designing sophisticated layouts. Angular Layout provides a sophisticated API using Flexbox. The module provides Angular developers with component layout features using a custom layout API.


2 Answers

No need to write a new directive until Material2 provide us the LayoutModule.

You just have to import the angular layouts-attributes.css from angular1. It takes the old directive as css selector.

require('node_modules/angular-material/modules/layouts/angular-material.layouts-attributes.css')

for example the css for directive layout-align="end" it use the css selector: [layout-align="end"]

like image 22
lekev87 Avatar answered Sep 17 '22 19:09

lekev87


January 2017 Update:

Angular 2 team recently added a new NPM package flex-layout for layout only. It is a separate package independent of angular material.
The full instructions are available in the github page README.

Install the module:

npm install @angular/flex-layout -save

In app.module.ts (or equivalent), declare the module:

import {FlexLayoutModule} from "@angular/flex-layout";  @NgModule({   imports: [       ...      FlexLayoutModule   ],   ... }) 

Markup example:

<div class="flex-container"       fxLayout="row"       fxLayout.xs="column"      fxLayoutAlign="center center"      fxLayoutAlign.xs="start">   <div class="flex-item" fxFlex="20%" fxFlex.xs="40%">  </div>   <div class="flex-item" fxFlex>        </div>   <div class="flex-item" fxFlex="25px"> </div> </div> 

Here is a plunker sample taken from the flex-layout github page.


Original Answer:

The docs you are referring to are for angular1 material. Angular2 material still doesn't have any layout directives.

You can easily create the directive yourself in a simple way.

All you need to know:

layout="row" is same as style="display:flex;flex-direction:row"
layout="column" => style="display:flex;flex-direction:column"

And flex is equal to style="flex:1"

As directives:

@Directive({   selector:'[layout]' }) export class LayoutDirective{   @Input() layout:string;   @HostBinding('style.display') display = 'flex';    @HostBinding('style.flex-direction')   get direction(){        return (this.layout === 'column') ? 'column':'row';   } } 

The flex directive, use it like: <div flex> or <div flex="10"> any number from 0 - 100%. Also, just for fun, I added shrink and grow inputs

@Directive({   selector:'[flex]' }) export class FlexDirective{     @Input() shrink:number = 1;     @Input() grow:number = 1;     @Input() flex:string;      @HostBinding('style.flex')     get style(){         return `${this.grow} ${this.shrink} ${this.flex === '' ? '0':this.flex}%`;     } } 

To use them everywhere without adding them to each component:

@NgModule({   imports:      [ BrowserModule ],   declarations: [ AppComponent,FlexDirective ,LayoutDirective ],   bootstrap:    [ AppComponent ] }) export class AppModule { } 

Here is a sample in plunk

like image 173
Abdulrahman Alsoghayer Avatar answered Sep 21 '22 19:09

Abdulrahman Alsoghayer