Директивы макет поддерживается угловые 2 материал элементов конструкции?
Я пытаюсь использовать Конструкция Материала Angular2 компоненты, и я не могу получить любой из директивы разметки на работу. Пример:
согласно примерам, это должно "просто работать":
<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>
но это не так - он просто отображает элементы на странице как простые старые дивы. (Я использую последнюю версию Chrome).
Я что-то пропустил, например, есть ли файл CSS, который я должен импортировать?
3 ответа:
Январь 2017 Обновление:
Angular 2 команда недавно добавила новый пакет NPM flex-layout только для макета. Отдельный пакет независимый углового материала.
Полные инструкции доступны в страница github README.установить модуль:
npm install @angular/flex-layout-save
в приложение.модуль.ts (или эквивалент), объявляют модуль:
import {FlexLayoutModule} from "@angular/flex-layout"; @NgModule({ imports: [ ... FlexLayoutModule ], ... })
наценка пример:
<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>
здесь образец plunker взято со страницы GitHub flex-layout.
Оригинальный Ответ:
The docs вы имеете в виду для материала angular1. Angular2 материал по-прежнему не имеет каких-либо директив макета.
вы можете легко создать директиву самостоятельно простым способом.
все, что вам нужно чтобы знать:
layout="row"
такой же, какstyle="display:flex;flex-direction:row"
layout="column"
=>style="display:flex;flex-direction:column"
и
flex
равнаstyle="flex:1"
как директивы:
@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'; } }
директива flex, используйте ее как:
<div flex>
или<div flex="10">
любое число от 0 до 100%. Кроме того, просто для удовольствия, я добавил shrink и 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}%`; } }
использовать их везде, не добавляя их к каждому компоненту:
@NgModule({ imports: [ BrowserModule ], declarations: [ AppComponent,FlexDirective ,LayoutDirective ], bootstrap: [ AppComponent ] }) export class AppModule { }
вот пример в plunk
нет необходимости писать новую директиву, пока Material2 не предоставит нам LayoutModule.
вам просто нужно импортировать угловые макеты-атрибуты.css от angular1. Он принимает старую директиву в качестве селектора css.
require ('node_modules / angular-material / modules / layouts / angular-material.макеты-атрибуты.css')
например css для директивы layout-align= " end " он использует css селектор: [layout-align= "end"]
другой вариант-использовать angular2-polymer для того чтобы вытянуть в полимер iron-flex-layout. Он немного более ограничен и имеет немного другой API, чем макет Material 1 (но макет Material 2 также будет иметь другой API). Но он работает сейчас и поддерживается.
есть также руководство здесь.