ng-japan meetup

2017 Autumn

About me

Kazuyoshi Kawakami

 @saruyama.monki

メトロノーム 川上

Talk about

Web Components 紹介

AngularでWeb Componentを使う

Web Componentsの紹介

Web Componentはウェブの標準APIで、独自のカスタムHTMLタグを定義することが出来ます。

<metronome-kawakami tempo="80" beat="4"></metronome-kawakami>

Web Components is Tag

WebComponentはタグなので、

そのタグを読み込むめば、どのフレームワークやライブラリでも動作します

<metronome-kawakami tempo="80" beat="4"></metronome-kawakami>

Web components の構成

Custom Element

Shadow DOM

HTML imports

HTML Template 

Browser Support

なぜ web componentを使うのか?

プロジェクトの環境に影響されないタグを作れるので効率が良くなります。

 

例えば、ヘッダー、フッターなどをWeb Component化して使いまわすなど

Introduction Polymer

What's Polymer

Polymerとは、Google ChromeチームがWebComponentsを普及させるために作ったライブラリです

Polymerをなぜ使うの?

Polymerを使うことで、WebComponentを楽に作れることと、まだWeb Componentの仕様で標準化されていない機能を使うことが出来ます。(データバインディングなど)

How to use from Angular

How to use from Angular

$ npm install -g bower
$ vi .bowerrc

{
   "directory": "src/assets/bower_components",
   "json": "bower.json"
 }

$ bower install --save Polymer/polymer  

OR

How to use from Angular

$ vi src/app/app.module.ts

...

import {NgModule, CUSTOM_ELEMENTS_SCHEMA} from '@angular/core';

...

@NgModule({
  ...

  schemas   : [CUSTOM_ELEMENTS_SCHEMA],

})
export class AppModule { }

Angularの設定はこれだけです

Web Componentを作成

$ vi src/assets/web_components/metronome_header_title.html

<dom-module id="metronome-header-title">
    <template>
        <style>
            .header-title p {
                color: #fff;
                font-size: 3.6rem;
            }
        </style>
        <div class="header-title">
            <p>
                <slot></slot>
            </p>
        </div>
    </template>
    <script>
        class MetronomeHeaderTitle extends Polymer.Element {
            static get is () { return 'metronome-header-title'; }
        }
        customElements.define (MetronomeHeaderTitle.is, MetronomeHeaderTitle);
    </script>
</dom-module>

Web Componentを使う

$ vi src/index.html

<head>
  ...
  <link rel="import" href="assets/web_components/metronome_header_title.html">
</head>
$ vi src/app/component/app/app.component.html

<div class="header">
    ...

    <metronome-header-title>foo</metronome-header-title>
</div>

robwormald/angular-elements

AngularでWebComponentを作れるライブラリ

https://github.com/robwormald/angular-elements

Thank you

Made with Slides.com