2014年11月7日金曜日

Angular-Materialを動かすための最小限テンプレートサンプル

最近Angular-Material(以下「AM」)を使ってみている。

material.angularjs.org

AMはまだ開発の初期段階ではあるものの、すでに結構使える状態ではないかと思う。

しかし、まだドキュメントが不十分でとっつきにくい。デモページでソースコードが見られるようになってはいるものの、headの終端から始まっていてコード全体が見通しにくい。


結局、AMのリポジトリをクローンしてデモの中身を直接見に行かなければならなかった。

そこで、ここにAMを動かすための最小限テンプレートの例を書いておきたいと思う。最終的にはこのように表示される。



Angular-Materialコンポーネントのインストール

まずは適当な場所にプロジェクトディレクトリをつくり、AMをインストールする。

# cd ~/git
# mkdir AngularMaterialMin
# cd AngularMaterialMin
# bower install angular-material

これで必要なモジュールが全て揃う。


index.html
<!DOCTYPE html>
<html ng-app="app" ng-controller="AppCtrl">
  <head>

    <meta charset="utf-8" />
    <meta name="format-detection" content="telephone=no" />
    <meta name="msapplication-tap-highlight" content="no" />
    <meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width, height=device-height" />

    <title>AngularMaterialMin</title>

    <!-- CSS -->
    <link rel="stylesheet" href="bower_components/angular-material/angular-material.min.css">
    <link rel="stylesheet" type="text/css" href="css/app.css" />

    <!-- JS -->
    <script src="bower_components/hammerjs/hammer.min.js"></script>
    <script src="bower_components/angular/angular.min.js"></script>
    <script src="bower_components/angular-animate/angular-animate.min.js"></script>
    <script src="bower_components/angular-aria/angular-aria.min.js"></script>
    <script src="bower_components/angular-material/angular-material.min.js"></script>
    <script src="js/app.js"></script>

  </head>
  <body layout="vertical">

    <!-- ツールバー -->
    <md-toolbar>
      <div class="md-toolbar-tools">
        <span flex>AngularMaterialMin</span>
        <md-button aria-label="ボタン" ng-click="onClickBtn();">ボタン</md-button>
      </div>
    </md-toolbar>

    <!-- コンテンツ -->
    <md-content class="md-padding">
      <p>ここにコンテンツ</p>
    </md-content>

  </body>
</html>

ここでのポイントはbodyタグの「layout="vertical"」。これを指定しないとコンテンツ部分が長くなってスクロールしたときにツールバーも上にスクロールしてしまう。


css/app.css
* {
  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
  -webkit-touch-callout: none;
  -webkit-text-size-adjust: none;
  -webkit-user-select: none;
}

input[type=text] {
  -webkit-user-select: auto;
}

Cordovaでのモバイルアプリ開発を意識した設定を入れているが、通常のWebアプリを開発するならハッキリ言ってこのCSSは無くてもいい。AMを動かすために独自のCSSで色々と設定する必要は無い。


js/app.js
var app = angular.module("app", ["ngMaterial"]);
app.controller('AppCtrl', function ($scope) {

  console.log('メインコントローラー初期化');

  $scope.onClickBtn = function(evt) {
    console.log("onClickBtn()");
  }

});

ここでのポイントは追加モジュールとして「ngMaterial」を指定すること。これを指定しないと全く動かない。


テーマを指定する

テーマの読み込みと指定方法を探すのに少々苦労した(^^);

デフォルトテーマは「angular-material.min.css」。その他のテーマは追加でthemesの配下にあるテーマファイルを読み込む。

例えばこのようなファイル「bower_components/angular-material/themes/amber-theme.css」。テーマのCSSを読み込む順番は任意で構わない。

その上で、各コンポーネントに「md-theme」のアトリビュートを使ってテーマを指定する。

<md-progress-linear md-theme="amber" mode="determinate" ng-value="50"></md-progress-linear>

md-buttonはデフォルト状態ではテーマを変更しても色が変わらない。「class="md-primary"」などの色が付くようなクラスを指定する必要がある。


全プロジェクトファイル

GitHubに上げてある。

junkoro/AngularMaterialMin

ライセンス?

WTFPL – Do What the Fuck You Want to Public License