Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
Uploaded by
佐藤 俊太郎
PDF, PPTX
2,071 views
サーバサイドで動的にhtml生成していたりjQueryをガッツし使っている既存プロジェクトにAngularJSを部分的につっこんでみた @jscafe21
サーバサイドで動的にhtml生成していたりjQueryをガッツし使っている既存プロジェクトにAngularJSを部分的につっこんでみた @jsCafe21
Engineering
◦
Read more
5
Save
Share
Embed
Embed presentation
Download
Download as PDF, PPTX
1
/ 42
2
/ 42
3
/ 42
4
/ 42
5
/ 42
6
/ 42
7
/ 42
8
/ 42
9
/ 42
10
/ 42
11
/ 42
12
/ 42
13
/ 42
14
/ 42
15
/ 42
16
/ 42
17
/ 42
18
/ 42
19
/ 42
20
/ 42
21
/ 42
22
/ 42
23
/ 42
24
/ 42
25
/ 42
26
/ 42
27
/ 42
28
/ 42
29
/ 42
30
/ 42
31
/ 42
32
/ 42
33
/ 42
34
/ 42
35
/ 42
36
/ 42
37
/ 42
38
/ 42
39
/ 42
40
/ 42
41
/ 42
42
/ 42
More Related Content
PDF
Creators'night#13 tech#2今井
by
Daisuke Imai
PDF
JavaScriptでいいじゃなイカ
by
Yuuichi Akagawa
PDF
Progressive Framework Vue.js 2.0
by
Toshiro Shimizu
PDF
Start React with Browserify
by
Muyuu Fujita
PDF
はじめよう Backbone.js
by
Hiroki Toyokawa
PDF
ソーシャルアプリ勉強会(第一回資料)配布用
by
Yatabe Terumasa
PDF
jQuery Mobile 概要
by
トモロヲ いちがみ
PDF
One night Vue.js
by
Masahiro Kyuden
Creators'night#13 tech#2今井
by
Daisuke Imai
JavaScriptでいいじゃなイカ
by
Yuuichi Akagawa
Progressive Framework Vue.js 2.0
by
Toshiro Shimizu
Start React with Browserify
by
Muyuu Fujita
はじめよう Backbone.js
by
Hiroki Toyokawa
ソーシャルアプリ勉強会(第一回資料)配布用
by
Yatabe Terumasa
jQuery Mobile 概要
by
トモロヲ いちがみ
One night Vue.js
by
Masahiro Kyuden
What's hot
PDF
初めてのvue.js(2.x系)
by
健人 井関
PDF
iOS WebView App
by
hagino 3000
PDF
SVG MANIAX Ver.2 - Mars vanilla
by
Naoki Matsuda
PDF
HTML5のCanvas入門 - Img画像を編集してみよう -
by
Toshio Ehara
PDF
Canvas勉強会
by
Tsutomu Kawamura
PDF
Velocity.js is next generation animation engine.
by
陽平 南
PDF
iOS の通信における認証の種類とその取り扱い
by
niwatako
PPTX
React を導入したフロントエンド開発
by
daisuke-a-matsui
PDF
HTML5 と SVG で考える、これからの画像アクセシビリティ
by
Naoki Matsuda
PDF
backbone.jsの使用例 その1
by
Makoto Haruyama
PDF
Scc2014 :jQueryの仕組みを完璧に理解する
by
Jun Futakawa
PPTX
Vue.js 2.0を試してみた
by
Toshiro Shimizu
PDF
Web socketドロンくん その後-
by
Yuuichi Akagawa
PDF
はじめてのVue.js
by
kamiyam .
KEY
Kawaz的jQuery入門
by
Kohki Miki
PPTX
忙しい人のためのBackbone.jsとAngular.js入門
by
Toshiaki Maki
PDF
The master plan ofscaling a web application
by
Yusuke Wada
PDF
Backbone.js入門
by
AdvancedTechNight
PDF
Angular js or_backbonejs
by
Omasa Yusaku
PDF
Backbonejs @BuildInsiderOffline #1
by
daisuke shimizu
初めてのvue.js(2.x系)
by
健人 井関
iOS WebView App
by
hagino 3000
SVG MANIAX Ver.2 - Mars vanilla
by
Naoki Matsuda
HTML5のCanvas入門 - Img画像を編集してみよう -
by
Toshio Ehara
Canvas勉強会
by
Tsutomu Kawamura
Velocity.js is next generation animation engine.
by
陽平 南
iOS の通信における認証の種類とその取り扱い
by
niwatako
React を導入したフロントエンド開発
by
daisuke-a-matsui
HTML5 と SVG で考える、これからの画像アクセシビリティ
by
Naoki Matsuda
backbone.jsの使用例 その1
by
Makoto Haruyama
Scc2014 :jQueryの仕組みを完璧に理解する
by
Jun Futakawa
Vue.js 2.0を試してみた
by
Toshiro Shimizu
Web socketドロンくん その後-
by
Yuuichi Akagawa
はじめてのVue.js
by
kamiyam .
Kawaz的jQuery入門
by
Kohki Miki
忙しい人のためのBackbone.jsとAngular.js入門
by
Toshiaki Maki
The master plan ofscaling a web application
by
Yusuke Wada
Backbone.js入門
by
AdvancedTechNight
Angular js or_backbonejs
by
Omasa Yusaku
Backbonejs @BuildInsiderOffline #1
by
daisuke shimizu
Viewers also liked
PDF
インフラエンジニアのためのRancherを使ったDocker運用入門
by
Masahito Zembutsu
PDF
5分で分かるアジャイルムーブメントの歴史 拡大版
by
Fumihiko Kinoshita
PDF
はじめてのアジャイル - Agile in a nutshell
by
Dai FUJIHARA
PPT
Ameba流 scrumを浸透させていく方法
by
Hirotaka Osaki
PDF
小さな会社(チーム)で クールなアプリをつくる方法 Gunosy UI Design Study #1
by
佐藤 俊太郎
PPTX
アジャイルとクラウドの『危険なカンケイ』
by
Mamoru Ohashi
PDF
株式会社Gunosy fix
by
Makoto Ujyu
PDF
Prott Story ( Prottができるまで )
by
Naofumi Tsuchiya
インフラエンジニアのためのRancherを使ったDocker運用入門
by
Masahito Zembutsu
5分で分かるアジャイルムーブメントの歴史 拡大版
by
Fumihiko Kinoshita
はじめてのアジャイル - Agile in a nutshell
by
Dai FUJIHARA
Ameba流 scrumを浸透させていく方法
by
Hirotaka Osaki
小さな会社(チーム)で クールなアプリをつくる方法 Gunosy UI Design Study #1
by
佐藤 俊太郎
アジャイルとクラウドの『危険なカンケイ』
by
Mamoru Ohashi
株式会社Gunosy fix
by
Makoto Ujyu
Prott Story ( Prottができるまで )
by
Naofumi Tsuchiya
Similar to サーバサイドで動的にhtml生成していたりjQueryをガッツし使っている既存プロジェクトにAngularJSを部分的につっこんでみた @jscafe21
PDF
多分モダンなWebアプリ開発
by
tak-nakamura
PPT
20130924 Picomon CRH勉強会
by
Yukihiro Kitazawa
PPTX
JavaScriptテンプレートエンジンで活かすData API
by
Hajime Fujimoto
PDF
AngularJSで業務システムUI部品化
by
Toshio Ehara
PDF
IgGrid 入門編
by
Daizen Ikehara
PDF
AngularJSとD3.jsによるインタラクティブデータビジュアライゼーション
by
Yosuke Onoue
KEY
はじめてのCouch db
by
Eiji Kuroda
PDF
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
by
Akira Inoue
PDF
HTML5 ビギナーのための AngularJS
by
Kenichi Kanai
PPTX
エンタープライズ分野での実践AngularJS
by
Ayumi Goto
PDF
AngularJS 概説
by
Kenichi Kanai
PDF
Backbone.js
by
daisuke shimizu
PPTX
HTML5&API総まくり
by
Shumpei Shiraishi
PDF
Ext.direct
by
Shuhei Aoyama
PDF
㉗HTML5+jQueryでお絵かき
by
Nishida Kansuke
PPTX
JavaScriptテンプレートエンジンで活かすData API
by
Hajime Fujimoto
PDF
Objective Front-End JavaScript
by
Muyuu Fujita
PDF
IgChart 入門編
by
Daizen Ikehara
PDF
エンジニア勉強会_DECIDE
by
エンジニア勉強会 エスキュービズム
多分モダンなWebアプリ開発
by
tak-nakamura
20130924 Picomon CRH勉強会
by
Yukihiro Kitazawa
JavaScriptテンプレートエンジンで活かすData API
by
Hajime Fujimoto
AngularJSで業務システムUI部品化
by
Toshio Ehara
IgGrid 入門編
by
Daizen Ikehara
AngularJSとD3.jsによるインタラクティブデータビジュアライゼーション
by
Yosuke Onoue
はじめてのCouch db
by
Eiji Kuroda
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
by
Akira Inoue
HTML5 ビギナーのための AngularJS
by
Kenichi Kanai
エンタープライズ分野での実践AngularJS
by
Ayumi Goto
AngularJS 概説
by
Kenichi Kanai
Backbone.js
by
daisuke shimizu
HTML5&API総まくり
by
Shumpei Shiraishi
Ext.direct
by
Shuhei Aoyama
㉗HTML5+jQueryでお絵かき
by
Nishida Kansuke
JavaScriptテンプレートエンジンで活かすData API
by
Hajime Fujimoto
Objective Front-End JavaScript
by
Muyuu Fujita
IgChart 入門編
by
Daizen Ikehara
エンジニア勉強会_DECIDE
by
エンジニア勉強会 エスキュービズム
More from 佐藤 俊太郎
PDF
`redux`と`flux`を比べてみたときの個人的な感想
by
佐藤 俊太郎
PDF
Source kittenについて
by
佐藤 俊太郎
PDF
Createjsについて@jsCafe20
by
佐藤 俊太郎
PDF
flasherがはじめてiOS開発をしてみて
by
佐藤 俊太郎
PDF
yidev 第18回勉強会 「業務でSwiftで3ヶ月開発してきたので一旦振り返り」
by
佐藤 俊太郎
PDF
iOSオジサンは JSオジサンを これからも覗きにくる
by
佐藤 俊太郎
KEY
Introduction for cocos2d
by
佐藤 俊太郎
PDF
Bond の v4 について
by
佐藤 俊太郎
`redux`と`flux`を比べてみたときの個人的な感想
by
佐藤 俊太郎
Source kittenについて
by
佐藤 俊太郎
Createjsについて@jsCafe20
by
佐藤 俊太郎
flasherがはじめてiOS開発をしてみて
by
佐藤 俊太郎
yidev 第18回勉強会 「業務でSwiftで3ヶ月開発してきたので一旦振り返り」
by
佐藤 俊太郎
iOSオジサンは JSオジサンを これからも覗きにくる
by
佐藤 俊太郎
Introduction for cocos2d
by
佐藤 俊太郎
Bond の v4 について
by
佐藤 俊太郎
サーバサイドで動的にhtml生成していたりjQueryをガッツし使っている既存プロジェクトにAngularJSを部分的につっこんでみた @jscafe21
1.
2014/07/27 @jsCafe21 サーバサイドで動的にhtml生成していたり jQueryをガッツし使っている 既存プロジェクトにAngularJSを 部分的につっこんでみた
2.
名前:佐藤俊輔 twitter : @ushisantoasobu 所属
: 株式会社ジークレスト 経歴 : 主にフロントエンドエンジニア 担当 : 現在はポケットランド(スマホweb)というアバターサービス 自己紹介
3.
その前の発表がVue.jsで、そこでおそらく Angularがディスられるので省略 Angularとは
4.
「AngularってSPAつくるためのものでしょ?」 自分の勝手な思い込み
5.
- Rebuild 27 -
mozaic.fm #3 (こちらはAngularのみを70分くらい) 「ハイブリッド」もありのようだ
6.
- step1 :
データバインディングで効率化 - step2 : 共通モジュールをディレクティブ化 - step3 : 中規模程度の新機能をSPAっぽく 担当プロジェクトでのAngular導入ステップ
7.
- step1 :
データバインディングで効率化 ✓ - step2 : 共通モジュールをディレクティブ化 ✓ - step3 : 中規模程度の新機能をSPAっぽく 担当プロジェクトでのAngular導入ステップ
8.
データバインディング <p>{{message}}</p> $scope.message = “hoge”; .html .js
9.
使っているところ = xhrで表示更新するところ (初期表示のhtmlについてはJavaのvelocityで生成している)
12.
- ゲームのポイントやランキング - アイテム所持数 -
報酬アイテム などなど...結構ある
13.
- 同じデータを表示する箇所が複数あっても安心 - データのオブジェクトさえつっこめばいいので楽 (もうjQueryではやりたくない) 特にいいと思ったところ
14.
同じデータを複数のDOMで表示することが多々ある
15.
<div class=”point_total”>×{{targetRewardPoint}}</div> ... <div class=”point_total”>×{{targetRewardPoint}}</div> ... <div
class=”result_point_total”>×{{targetRewardPoint}}</div> .html
16.
<div class=”point_total”>×{{targetRewardPoint}}</div> ... <div class=”point_total”>×{{targetRewardPoint}}</div> ... <div
class=”result_point_total”>×{{targetRewardPoint}}</div> $scope.targetRewardPoint = data.point; .html .js もちろんこれだけでOK
17.
{ " "bannerDataList":null, " "boxLevelBonusAchieveLevel":1, "
"boxLevelBonusList":[], " "completeFlg":false, " "completePoint":0, " "countRewardDataList":null, " "currentPoint":327, " "currentRank":27910, " "deliveryCount":0, " "deliveryCountRewardDataList":null, " "orderPoint":0, " "pointRewardDataList":[ " " { " " " "categoryName":"アクセサリ/手系", " " " "count":1, " " " "dataItemFlg":false, " " " "imageUrl":"shop/clothes/acceh/acceh_10824494_shop.png", " " " "itemId":10824494, " " " "itemName":"ふしぎな実", " " " "itemRare":0, " " " "rewardPoint":300 " " } " ], " "restRewardCount":55, " "resultCd":0, " "token":null } あるAPIでこのようなjsonが返ってくるとする
18.
{ " "bannerDataList":null, " "boxLevelBonusAchieveLevel":1, "
"boxLevelBonusList":[], " "completeFlg":false, " "completePoint":0, " "countRewardDataList":null, " "currentPoint":327, " "currentRank":27910, " "deliveryCount":0, " "deliveryCountRewardDataList":null, " "orderPoint":0, " "pointRewardDataList":[ " " { " " " "categoryName":"アクセサリ/手系", " " " "count":1, " " " "dataItemFlg":false, " " " "imageUrl":"shop/clothes/acceh/acceh_10824494_shop.png", " " " "itemId":10824494, " " " "itemName":"ふしぎな実", " " " "itemRare":0, " " " "rewardPoint":300 " " } " ], " "restRewardCount":55, " "resultCd":0, " "token":null } 枠部分(報酬アイテム情報)を表示したい
19.
<div> " <div> " <img
src="http://img.atgames.jp/sp/update/2014/04/icon_point.png"> " " <span id=”reward_span_reward_point”></span>達成 " </div> " <div><img id=”reward_img_reward_url”></div> " <div id=”reward_div_reward_itemname”></div> " <div id=”reward_div_reward_itemcount”></div> </div> var reward = data.pointRewardData[0]; jQuery(“#reward_span_reward_point”).html(reward.rewardPoint); jQuery(“#reward_img_reward_url”).attr('src', reward.imageUrl); jQuery(“#reward_div_reward_itemname”).html(“<em>” + reward.categoryName + “</em><br>” + reward.itemName); jQuery(“#reward_div_reward_itemcount”).html(“×” + reward.count); .html .js これまで自分がjQueryで書いてた方法(もっとキレイに書ける?汗)
20.
AngularJSで書いた方法。ロジック側の記述が楽 <div> " <div> " "
<img src="http://img.atgames.jp/sp/update/2014/04/icon_point.png"> " " <span>{{pointRewardData.rewardPoint}}</span>達成 " </div> " <div><img src="http://img.atgames.jp/{{pointRewardData.imageUrl}}"></div> " <div><em>{{pointRewardData.categoryName}}</em><br>{{pointRewardData.itemName}}</div> " <div ng-show="pointRewardData.count > 1">×{{pointRewardData.count}}</div> </div> $scope.pointRewardDataList = pointRewardDataList; .html .js
21.
負の遺産もつくってしまった、、、恥ずかしいけど書く
23.
ページ表示時に サーバサイドで動的に値を埋め込んでいる、 でもその後xhrでも値を更新したい、 といった箇所
24.
<!-- 初期表示にvelocityで値を埋め込みたい --> <p>$!{rank}</p> <!--
でもangularでも書きたい(どんどん更新していくので) --> <p>{{rank}}</p> .html .js $scope.rank = 0; どうする?
25.
<p>{{rank}}</p> <script> var setupAngular =
function(){ " var _scope = angular.element(ngCtrl).scope(); " _scope.$apply(function(){ " " _scope.rank = $!{rank}; " }); }; </script> .html .js $scope.rank = 0; angular.element(document).ready(function() { " if(setupAngular && typeof setupAngular === "function"){ " " setupAngular(); //本体htmlのグローバルメソッドにアクセス " } }); html側のスクリプトにvelocityで吐き出される値を書き出して、、、 みたいなことをやってる。しかも不要にグローバル変数をつくってしまってる
26.
- 簡単にいえば「カスタムタグ」or「カスタム属性」 ディレクティブ
29.
サービス内の複数のページで共通で使用している機能 をディレクティブ化する
30.
ディレクティブ化する前 イベント毎にソースをコピペして、値の一部を変えることで対応していた(惰性) <canvas id=” canvas_100522”></canvas> <script> (function(){ "
var self = {}, canvas, stage, exportRoot, " POS_X = 0, POS_Y = 0, SCALE = 0.55; //※ここ調整する " " self.init = function() { " " canvas = document.getElementById("canvas_100522"); " " df100522_images = df100522_images||{}; " " var len = df100522.properties.manifest.length; " " for(var i = 0; i < len; i++){ " " " var url = df100522.properties.manifest[i].src; " " " url = window.IMAGE_DOMAIN + "/high/roomfurniture/deco/" + url; " " " df100522.properties.manifest[i].src = url; " " } " " var loader = new createjs.LoadQueue(false); " " loader.addEventListener("fileload", self.handleFileLoad); " " loader.addEventListener("complete", self.handleComplete); " " loader.loadManifest(df100522.properties.manifest); " } " self.handleFileLoad = function(evt) { "" if (evt.item.type == "image") { df100522_images[evt.item.id] = evt.result; } " } " self.handleComplete = function() { "" //ここは省略 " } " window.selfytown.df100522_shop = self; }()); </script> .html
31.
ディレクティブ化する .directive('df', function() { "
return { " " restrict: 'E', " " transclude: true, " " scope: { " " " furnitureid: '@', " " " category: '@', " " " posx: '@', " " " posy: '@', " " " scale: '@' " " }, " " template: " " " '<canvas id="js_canvas_dynamic_furniture_{{furnitureid}}"></canvas>', " " link:function($scope, $element){ " " " var canvas, " " " " len, " " " " url, " " " " loader, " " " " exportRoot, " " " " stage; " " " " " " canvas = $element[0]; " " " len = window["df" + $scope.furnitureid].properties.manifest.length; " " " for(i = 0; i < len; i++){ " " " " url = window["df" + $scope.furnitureid].properties.manifest[i].src; " " " " url = window.IMAGE_DOMAIN + "/high/roomfurniture/" + $scope.category + "/" + url; " " " " window["df" + $scope.furnitureid].properties.manifest[i].src = url; " " " } " " " //CreateJSまわりの処理は省略 " " }, " " replace: true " }; }); .js
32.
ディレクティブ化した後 <df furnitureid=”100522” category=”deco”
posX=”0” posY=”0” scale=”0.55”></df> .html 以後これだけでOK(でもやっぱ黒魔術的な匂いがする)
33.
- ディレクティブの使いどころについては @konpyuさんのスライドがわかりやすかった http://www.slideshare.net/KonYuichi/0601-angular-note - mozaic.fm
#3 でもゲストでお話されています!
34.
- 中規模程度の機能をSPAっぽくつくりたい SPAっぽくつくりたい
36.
イベントページのタブボタン押下時の画面の切り替えを 今はページ読み込みになっているけど APIだけ返してもらっての表示の切り替えにしたい
37.
- アプリっぽい挙動にしたい =
サクサク感 やりたいこと
38.
- フロントまわりでの処理が多くなるので 機種やOSによっては逆に描画が遅くなるかも? - htmlをキャッシュさせることでSPAを実現するけど htmlの更新の仕組みをうまくつくらないと -
既存のワークフロー(webコーダー、サーバサイド) から見直さないといけない 懸念事項
39.
- jQueryも使える(angular.element) - 動的に表示を更新してく箇所がたくさんあるときは jQueryではもう書けない、 でも必ずしもAngularでなくてもよい? まとめや補足
40.
- 改めて振り返ると、、初期学習コストは高いかも - html自体がテンプレートになっているので webコーダーもみやすい -
でも急に見知らぬカスタムタグつくるとビックリ されて迷惑がられる まとめや補足
41.
- Angularっぽくないこのスライドの色合いは、 当初はW杯直前に発表する予定だったため ブラジルカラーっぽくしてるだけ まとめや補足
42.
ご清聴ありがとうございます!
Download