Upload
hayashi-yuichi
View
3.795
Download
1
Embed Size (px)
Citation preview
自己紹介
林 優一!@frontainerフロントエンドエンジニア
AngularJS関連の登壇歴• AngularJSの今とこれから+,+フロントエンドエンジニア座談会+」
• AngularJS+ディレクティブ・パターン
• 受託開発でのAngularJS+
©"2014"LIG"INC."@frontainer
One$%me'Bindingとはバインディングを1度しか評価しないようにする機能
One$%me'bindingはAngularJS1.3から追加'(1.2以前の場合は「BindOnce」などのモジュールを使う)
©"2014"LIG"INC."@frontainer
使い方{{::name}}<div ng-repeat="user in ::users"></div>
ex)$demo1
©"2014"LIG"INC."@frontainer
例外
An#expression#that#starts#with#::#is#considered#a#one23me#expression.#One23me#expressions#will#stop#recalcula3ng#once#they#are#stable,#which#happens#a=er#the#first#digest#if#the#expression#result#is#a#non2undefined#value#(see#value#stabiliza3on#algorithm#below).
!!"AngularJS"Developer"Guide"!"Expressions
©"2014"LIG"INC."@frontainer
簡単に言うと・・・• 値がundefinedでなければ最初の$digestで値が保持される。
• 逆にいうとundefinedである間は値が固定されない。ex)$demo2
©"2014"LIG"INC."@frontainer
Watch数の違いをサンプルで見る500件の簡単なユーザーデータを持つJSONをng)repeatでループして表示させる
[ { "id": 1, "name": "User1", "value": 100 }, ...]
©"2014"LIG"INC."@frontainer
JavaScript
angular.module('app').controller('RootCtrl',[ '$scope', 'USERS', function($scope,USERS) { $scope.users = USERS; }]);
©"2014"LIG"INC."@frontainer
特に何もしない場合
<div ng-controller="RootCtrl"> <ul> <li ng-repeat="user in users"> <div>{{user.id}} - {{user.name}}</div> <div>{{user.value}}</div> </li> </ul></div>
ex)$demo3
©"2014"LIG"INC."@frontainer
配列に付けた場合
<div ng-controller="RootCtrl"> <ul> <li ng-repeat="user in ::users"> <div>{{user.id}} - {{user.name}}</div> <div>{{user.value}}</div> </li> </ul></div>
ex)$demo3)2
©"2014"LIG"INC."@frontainer
配列内のプロパティに付けた場合
<div ng-controller="RootCtrl"> <ul> <li ng-repeat="user in users"> <div>{{::user.id}} - {{::user.name}}</div> <div>{{::user.value}}</div> </li> </ul></div>
ex)$demo3)3
©"2014"LIG"INC."@frontainer
配列と配列内のプロパティに付けた場合
<div ng-controller="RootCtrl"> <ul> <li ng-repeat="user in ::users"> <div>{{::user.id}} - {{::user.name}}</div> <div>{{::user.value}}</div> </li> </ul></div>
ex)$demo3)4
©"2014"LIG"INC."@frontainer
$digestでのチェック回数• demo1[特に何もしない場合]:*1503回
• demo*2[配列に付けた場合]:*1502回
• demo*3[配列内のプロパティに付けた場合]:*3回
• demo*4[配列と配列内のプロパティに付けた場合]:*2回※!consoleに$digestループ実行回数が出力されますex)$demo4$demo4)2$demo4)3$demo4)4©"2014"LIG"INC."@frontainer
Dirty&Checking
そこの値を変えなければ良いということではなく、watch対象の値は変更されていないことをチェックされるsrc/ng/rootScope.js.7262836
Object.observeの普及はいつになることやら
©"2014"LIG"INC."@frontainer
まとめ• 双方向バインディングが必要でない場合は適切にOne%&me(
Bindingしていく
• Watch数をパフォーマンスチェック指標のひとつに
今回はChrome拡張の「Angular-watchers」を使って確認しました
©"2014"LIG"INC."@frontainer
ご静聴ありがとうございました本日のサンプルはこちら
h"ps://github.com/frontainer/ligblog6sample
スライドはこちら
h"p://www.slideshare.net/frontainer
©"2014"LIG"INC."@frontainer