Upgrade to Pro — share decks privately, control downloads, hide ads and more …

穏健AngularJS 〜 あいつはフレームワーク

穏健AngularJS 〜 あいつはフレームワーク

ng-kyoto Angular Meetup #2での発表に使用した資料です

OKUNOKENTARO

August 30, 2015
Tweet

More Decks by OKUNOKENTARO

Other Decks in Programming

Transcript

  1. Hello! • 奥野 賢太郎 はちさん armorik83 • ng-kyoto代表 • 業務でAngularJSやったりします

    • 趣味ではAngular 2やってます • あさってから東京
 ダンボールの山の中でこの資料を書いた
  2. • Reactと合わせて広まったFacebook Fluxアーキテクチャ • 8月になってから盛んにRedux! Redux!と騒がれる • このデータフローをAngularJS上で$broadcastとclassを 組み合わせて構築 •

    83曰く「AngularJSのDirectiveとロジックの分離や
 実装箇所の見通しがついて最高!」
 
 詳しくは [イベント駆動AngularJS] [検索]
  3. • Directive中心に設計しつつ、ストアとロジックをServiceに • ServiceはSingleton、言い換えると、これ自体が巨大グローバル変数
 子DirectiveがバラバラにDIしない • 親 (Root) Directiveが責任を持ってDI
 子DirectiveからServiceを操作したい場合は$rootScope.$broadcast()

    • Serviceは$rootScope.$on()によってイベントを受ける • 子DirectiveはbindToControllerを用いてインタフェースを備え
 親は必要な値を子に渡す • 子は渡された値のみをViewに利用する
  4. • Angular 2が$scopeを廃止するのは事実 • 長期的に活用を見越しているならば減らす方向に
 手入れするのが吉 • ui-routerを使っている場合、特に起こりうるのがGC漏れ • $broadcast,

    $onのイベントをすでに多階層で利用して
 いる場合、安易にすべての$scopeを置き換えると$destroyに よる適切なイベントの破棄がされずバグの温床 • ルーティング切り替えでどんどんリスナが溜まって処理が
 重くなっていく…(その節はご迷惑おかけしました)
  5. • Angular 2に移行する気が無いのなら、$scopeの件は
 「一切気にしない」のもひとつの手 • ただし$scope削減はTypeScriptやES2015の利用時に
 記述がシンプルになり有用なので、十分検討の価値がある • controller as構文やbindToControllerも活用する

    function tabs($scope){ var panes = $scope.panes = []; $scope.select = function(pane) { angular.forEach(panes, function(pane) { pane.selected = false; }); pane.selected = true; } this.addPane = function(pane) { if (panes.length == 0) $scope.select(pane); panes.push(pane); } } class Tabs { constructor() { this.panes = []; } select(pane) { angular.forEach(this.panes, (_pane) => { _pane.selected = false; }); pane.selected = true; } addPane(pane) { if (panes.length == 0) { this.select(pane); } this.panes.push(pane); } }
  6. これって? ? • Q1. npmとBrowserifyを組み合わせるのはですか? • A1. です
 AngularJSは1.3の途中から正式にCommonJSをサポートし
 npm

    installも可能 • ただし記述には派閥があるっぽい • 各ソースでrequire('angular')する派  の参加した案件
 旧ソースを引き継ぐと、こうなりがち • angular.moduleを細かく作って各ソースでexportする派
 新規案件ならこの手法も採り入れやすい、OSSにも採用例あり
  7. これって? ? • Q2. ui-routerを使うのはですか? • A2. です
 公式もこのサードOSSは十分認識しており、積極的に使って問題ありません •

    ただしui-viewネストには細心の注意を払った方がいい • 設計変更、値渡し、$rootScopeと$scopeの破棄タイミング等々
 気にすることが一気に増えてしまう
 + チーム内への十分な周知やDocs整備も必要となってくる • プロトタイピングや初期開発でいきなり根深く組み込んでしまうと
 忙しい時期に辛くなってくるかも
  8. これって? ? • Q3. Angular 2とAngularJSは組み合わせられるそうですが、ですか? • A3. です •

    まだ早い • しっかり整うまで待とう • 一旦忘れよう • 詳しくは先週
 "Angular 2@Grand-Frontend-Osaka 2015 Summer"で話した
 speakerdeck.com/armorik83/angular-2-at-grand-frontend-osaka-2015-summer