Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
TypeScriptで書くAngularJS @ GDG神戸2014.8.23
Search
OKUNOKENTARO
August 23, 2014
Programming
400
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
TypeScriptで書くAngularJS @ GDG神戸2014.8.23
2014年8月23日発表分の資料をSlideShareより再掲。
http://www.slideshare.net/armorik83/gdgkobe-angularjs-2
OKUNOKENTARO
August 23, 2014
More Decks by OKUNOKENTARO
See All by OKUNOKENTARO
トレタO/X アーキテクチャ移行記 Next.js App Router化への道のり / TORETA TECH UPDATE 1
okunokentaro
5
12k
Podcastを継続する技術 / refactoradio-240119
okunokentaro
1
240
Webアプリケーション設計の第一歩は ディレクトリの整理から / Encraft 1
okunokentaro
33
11k
JSONとJSON Schemaを改めて理解する / tokyo_study
okunokentaro
9
2.5k
それでもどうしてRecoilを使うのか / Harajuku.ts Meetup Recoil
okunokentaro
19
5.7k
TypeScriptは10年でこんなに進化しました / TechFeed Experts Night 11
okunokentaro
6
1.8k
Hasura.io RDBをサクサク作る方法はARやO/RMだけじゃなくなりました/hasura-io
okunokentaro
5
730
コードには型アノテーションよりも要件アノテーションを増やせ!/harajukuts2
okunokentaro
14
6.6k
10年と3ヶ月でWebサービスを作った話 / Piyogrammer Conference 2021
okunokentaro
2
1.1k
Other Decks in Programming
See All in Programming
HTML-in-Canvasで作る未来のWeb UI表現
clockmaker
5
5.1k
Jetpack Compose Mechanisms
skydoves
3
820
コードで差別化できない時代の ソフトウェアエンジニアリング / Software Engineering in an Era Where Code Doesn’t Differentiate
kishida
2
180
Rでドレミ/Do-Re-Mi_with_R
florets1
0
130
Unity6 URPによる海底をテーマにしたVJシステムの解説 | Unity Shader 完全に理解した 勉強会
gam0022
0
370
AWS CDKのカスタムリソースでContinuum(旧Security Agent)を実装した話 | Implementing Continuum (formerly Security Agent) via AWS CDK Custom Resource
akihisaikeda
2
150
半永久的に提供し続けられるプライベートクラウドを目指して ― 利用者の認知負荷を抑えるAPI抽象化とハードウェア世代交代の基盤設計
tomokon
0
500
UPDATE をやめる — EF Core でマスタをバージョン管理する
panda728
PRO
0
1.2k
外から家のPCの電源入れたい!をPHPで解決する
kawashimo0
1
140
Next.js: The final boss of Web Performance
guaca
0
260
作れる、でも消せるか?──安全に「枯らして消す」機能削除術 / Drain, Then Delete
chobishiba
2
760
Optunaを作ったときにやりたかったこと、その後 (2026/10/16, Optuna Meetup #3)
iwiwi
1
440
Featured
See All Featured
New Earth Scene 8
popppiees
4
2.7k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
8.1k
The Cult of Friendly URLs
andyhume
79
7k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
850
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
2
480
Balancing Empowerment & Direction
lara
6
1.3k
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
260
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
1
450
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
760
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
460
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2.2k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
1.1k
Transcript
5ZQF4DSJQUד剅ֻ "OHVMBS+4 "OHVMBS+4⹈䓼⠓CZ(%(牞䨫
"OHVMBS+4ךְְהֿ ˖ غ؎ٝسָ知⽃ 涪⚥חٌثك٦ءّٝ♳ָ ˖ 3&45GVM"1*䲿ךؿٖ٦يٙ٦ؙ ˖ ط؎ذ؍ـ،فٔה麩ְ ⦐➂ⵃ欽ךءأذي؟ؙה⡲ !BSNPSJL
植㖈ך圓䧭 /PEFKT &YQSFTT .POHP%# "OHVMBS+4 Database RESTful API Controller HTML
#SPXTFS JSON
ְײ.&"/أةحؙ ˖ ..POHP%# ˖ &&YQSFTT ˖ ""OHVMBS+4 ˖ //PEFKT Ⰻ鿇+BWB4DSJQU
Ⰻ鿇+BWB4DSJQU ׳הخٓ؎
http://www.typescriptlang.org/
،ٝ؛٦ز 兛媮5ZQF4DSJQU 剅ְגהְֲ倯
תך倯 כׄת׃׳ֲ
5ZQF4DSJQUהכ ˖ BMU+4הְ鎉铂ךמהא ˖ .JDSPTPGU爡ָ䎃ַ涪 חWָ⳿ ˖ +BWB4DSJQUך♳⡘✼䳔鎉铂 㢌䳔䖓ך+4ا٦أ铣װְׅ ˖
涸㘗➰ֽ ˖ $ח䢪גְⰅװְׅ
ז5ZQF4DSJQU ˖ 傀㶷ך+BWB4DSJQU项欵ծⰋג⢪ִ ˖ 㢌䳔䖓ך+4ا٦أָ铣װְׅ ˖ 涸㘗➰ֽBMU+4ד䝢זծָֿ♧殢ךⵃ挿 ˖ "OHVMBS+4⹛ַׅהـٓؐؠ♳ךرغحؚ ָ㢳涪̔㢌䳔䖓ךا٦أ铣堣⠓ָ㢳ְ
˖ 葿ղ⡲㨣הծ"OHVMBS+4ֽד 㣐鋉垷חזָ ˖ /PEFKT .POHP%#⢘欽ׅה +40/װ0CKFDUך䪔ְָ걼涪 ˖ 涸㘗➰ָֽ⸬ֻ ז5ZQF4DSJQU
˖ ؙٓأك٦أזؔـآؙؑز䭷ぢ鎉铂 ˖ Class.prototype.method = function(){… ⦜זQSPUPUZQF剅ֻ䗳銲כ֮תׇ ˖ ٗآحؙכⱄⵃ欽ךؙٓأחתה ˖
5ZQPכ؝ٝػ؎ָٓⰋ⸂ד䭷䶯 ˖ ؝ٝػ؎ٕؒٓ٦ָ⳿וֶַַֿ׃ְ ז5ZQF4DSJQU
5ZQF4DSJQU⢪ֲה 䠬⹛ׅ״
5ZQF4DSJQU ؟ٝفٕ 5ZQF4DSJQUⰕ䒭״䒷欽
class Greeter { private greeting: string; constructor(message: string) { this.greeting
= message; } public greet() { return 'Hello, ' + this.greeting; } } ! var greeter = new Greeter('world'); ! var button = document.createElement('button'); button.textContent = 'Say Hello'; button.onclick = () => { alert(greeter.greet()); }; ! document.body.appendChild(button); TS
var Greeter = (function () { function Greeter(message) { this.greeting
= message; } Greeter.prototype.greet = function () { return 'Hello, ' + this.greeting; }; return Greeter; })(); ! var greeter = new Greeter('world'); ! var button = document.createElement('button'); button.textContent = 'Say Hello'; button.onclick = function () { alert(greeter.greet()); }; document.body.appendChild(button); //# sourceMappingURL=greeter.js.map JS
class Greeter { private greeting: string; constructor(message: string) { this.greeting
= message; } public greet() { return 'Hello, ' + this.greeting; } } ! var greeter = new Greeter('world'); ! var button = document.createElement('button'); button.textContent = 'Say Hello'; button.onclick = () => { alert(greeter.greet()); }; ! document.body.appendChild(button); TS
class Greeter { private greeting: string; constructor(message: string) { this.greeting
= message; } public greet() { return 'Hello, ' + this.greeting; } } ! var greeter = new Greeter('world'); ! var button = document.createElement('button'); button.textContent = 'Say Hello'; button.onclick = () => { alert(greeter.greet()); }; ! document.body.appendChild(button); ̒䒷侧ך㘗 ،ؙإأ⥜귅㶨̓ OFX דㄎל̓ ֿך鴟כ֮ת㢌זְ ̓،ٗ٦ꟼ侧䒭&4⯓《 TS
ך➭ך暴䗙 ˖ 㘗䱿锷֮תׅ ˖ var foo = 'abc'; var foo:
string = 'abc';ה剅ַזֻגְְ ˖ JOUFSGBDFד㹋鄲ךזְ㘗ךך㹀纏 ˖ NPEVMFדせ瑞涸ז⢪ְ倯 ֿֿדְֲNPEVMFכ$PNNPO+4הכ殯ז ˖ آؑطؙٔأծ竰䪫ծזוזו
˖ ַתׁמ孑 ջ5ZQF4DSJQUٔؿ؋ٖٝأ խ7FS㼎䘔ռ ˖ 俑岀ֽדזֻծ涪橆㞮ך圓眠ַ 佄䴂خ٦ٕHSVOU CPXFS UTEזוך 鍑铡䲓鯹
˖ +BWB4DSJQU㛇燉濼陎鯹גתׅ ֶׅׅ剅硂 !WWBLBNF
ַֿֿכ ך鑧
5ZQF4DSJQU⢪ֲًٔحز ˖ "OHVMBS+4כ0CKFDUךװהָ㢳ְ ˖ 㘗➰ֽֿׅהדծ♶僇זفٗػذ؍פך ،ؙإأծ5ZQPծוו䭷䶯ׁ ˖ 䒷侧ח㘗䭷㹀׃גֶֽלծ铎㘗 ♷ִג؝ٝػ؎ٕؒٓ٦涪欰 ˖
孡➰ֻךָ傍ְ䝢תזְ
׃ ˖ ההؙإך֮"OHVMBS+4ך鎸岀זך דծ5ZQF4DSJQU㼪Ⰵחכ䊨㣗ָ䗳銲 ˖ ךֶ鑧׃תׅ
$POUSPMMFSךⴱ劍⻉
<body ng-app> <div ng-controller="SampleCtrl"> <strong>First name:</strong> {{firstName}}<br> </div> </body> HTML
JS function SampleCtrl ($scope) { $scope.firstName = 'John'; $scope.lastName = 'Doe'; ! $scope.getFullName = function () { return $scope.firstName + ' ' + $scope.lastName; }; };
<body ng-app> <div ng-controller="sampleCtrl"> <strong>First name:</strong> {{firstName}}<br> </div> </body> HTML
JS ! 5ZQF4DSJQUכ♶銲הְֲ倯 ֿך剅ֹ倯כװת׃׳ֲ ֮ה֮הخְٓדׅ ̕ function SampleCtrl ($scope) { $scope.firstName = 'John'; $scope.lastName = 'Doe'; ! $scope.getFullName = function () { return $scope.firstName + ' ' + $scope.lastName; }; };
angular.module('MyAngularJs', [/*...*/]); // Setter ! function SampleCtrl ($scope) { $scope.firstName
= 'John'; $scope.lastName = 'Doe'; ! $scope.getFullName = function () { return $scope.firstName + ' ' + $scope.lastName; }; }; ! angular.module('MyAngularJs') // Getter .controller('SampleCtrl', [ '$scope', // 使用するServiceは全て文字列で表記 SampleCtrl ]); JS BOHVMBSNPEVMF ⢪ְת׃׳ֲ
angular.module('MyAngularJs', [/*...*/]); // Setter ! function SampleCtrl ($scope) { $scope.firstName
= 'John'; $scope.lastName = 'Doe'; ! $scope.getFullName = function () { return $scope.firstName + ' ' + $scope.lastName; }; }; ! angular.module('MyAngularJs') // Getter .controller('SampleCtrl', [ '$scope', // 使用するServiceは全て文字列で表記 SampleCtrl ]); JS ֿֿ̓5ZQF4DSJQUח׃תׅ
TS // ... class SampleCtrl { constructor ( public $scope
) { this.$scope.firstName = 'John'; this.$scope.lastName = 'Doe'; ! this.$scope.getFullName = () => { return this.$scope.firstName + ' ' + this.$scope.lastName; }; } } ! angular.module('MyAngularJs') .controller('SampleCtrl', ['$scope', SampleCtrl]);
// ... class SampleCtrl { constructor ( public $scope )
{ this.$scope.firstName = 'John'; this.$scope.lastName = 'Doe'; ! this.$scope.getFullName = () => { return this.$scope.firstName + ' ' + this.$scope.lastName; }; } } ! angular.module('MyAngularJs') .controller('SampleCtrl', ['$scope', SampleCtrl]); TS ̒׳ה孡䭯䝤ְַ׃זְ խֽוծ"OHVMBS+4ך䒷侧כ㟓ִָ խזךד何遤׃גֶֻ ̓،ٗ٦ꟼ侧זךדUIJTָ䭷ׅⰻ㺁כ խ㢌זְ@UIJTהַ׃זֻגְְ ̕DMBTT㹑鎉׃תׅ DMBTTך؝ٝأزؙٓةָ床̓
class SampleCtrl { constructor ( public $scope ) { //
... } } ! class SampleCtrl { public $scope; constructor ($scope) { this.$scope = $scope; // ... } } TS ずֿׄה ׃גתׅ ♳ךקֲָءٝفٕ
؝ٝػ؎ٕ ˖ ➙剅ְ5ZQF4DSJQU؝ٝػ؎ٕׅה ˖ ؒٓ٦ /sample.ts(1,1): Cannot find name 'angular'.
˖ BOHVMBSהְֲ㢌侧כ搀ְה鎉תׅ
ֿד㘗㹀纏ؿ؋؎ٕ ˖ ➭ך+4ا٦أ荈ח׃ծٓ؎ـٓٔח׃ 欽ְהծ؝ٝػ؎ٓכծוך㢌侧ָ㹑鎉 幥ַⴻ倖דֹתׇ ˖ 㘗㹀纏ؿ؋؎ٕה撑⢪ְծ؝ٝػ؎ٓ ח侄ִתׅ
%FOJUFMZ5ZQFE ˖ %FOJUFMZ5ZQFEהְֲ؝ىُصذ؍דכծ +4ٓ؎ـٓٔך剣せוֿח㼎䘔׃ 㘗㹀纏ؿ؋؎ٕ鞢㺡ח⥂㸚׃גְ http://definitelytyped.org/ ˖ K2VFSZ %KT 6OEFSTDPSFKT
+BTNJOF .POHP%#זוזו˘ ˖ "OHVMBS+4֮
TS /// <reference path="angularjs/angular.d.ts" /> ! class SampleCtrl { constructor
( public $scope ) { this.$scope.firstName = 'John'; this.$scope.lastName = 'Doe'; ! this.$scope.getFullName = () => { return this.$scope.firstName + ' ' + this.$scope.lastName; }; } } ! angular.module('MyAngularJs') .controller('SampleCtrl', ['$scope', SampleCtrl]); ̓撑㹑鎉ׅה ̕؝ٝػ؎ָٓ㢌侧BOHVMBS钠陎㘗➰ֹד
TS declare var angular: any; ! class SampleCtrl { constructor
( public $scope ) { this.$scope.firstName = 'John'; this.$scope.lastName = 'Doe'; ! this.$scope.getFullName = () => { return this.$scope.firstName + ' ' + this.$scope.lastName; }; } } ! angular.module('MyAngularJs') .controller('SampleCtrl', ['$scope', SampleCtrl]); ̓EFDMBSFהְֲչ،ٝؽؒٝز㹑鎉պ欽ְה խ㘗㹀纏ؿ؋؎ָٕ搀ֻג؝ٝػ؎ٓח侄ִ խ؝ٝػ؎ٕ穠卓חכ䕦갟׃זְ
TS declare var angular: any; ! class SampleCtrl { constructor
( public $scope ) { this.$scope.firstName = 'John'; this.$scope.lastName = 'Doe'; ! this.$scope.getFullName = () => { return this.$scope.firstName + ' ' + this.$scope.lastName; }; } } ! angular.module('MyAngularJs') .controller('SampleCtrl', ['$scope', SampleCtrl]);
BOZ㘗 ˖ 5ZQF4DSJQUחכOVNCFS TUSJOH CPPMFBOה ְֲفٔىذ؍ـ㘗ָ欽䠐ׁגְ ˖ ך➭ծWPJE OVMM VOEFOFE㘗欽䠐ׁגְ
ֿך㘗דך㢌侧㹑鎉כדֹזְ ˖ BOZ㘗כ䖞勻ך+BWB4DSJQUך㘗 ˖ ؝ٝػ؎ٕؒٓ٦װ䖤׆럀ׇ㜥さװ 㹀纏ؿ؋؎ٕ锃麦דֹזְ㜥さזוח
ًاحسך ⴓⶴ
TS // ... ! class SampleCtrl { constructor ( public
$scope ) { this.$scope.firstName = 'John'; this.$scope.lastName = 'Doe'; ! this.$scope.getFullName = () => { return this.$scope.firstName + ' ' + this.$scope.lastName; }; } } ! // ...
TS // ... ! class SampleCtrl { constructor ( public
$scope ) { this.$scope.firstName = 'John'; this.$scope.lastName = 'Doe'; ! this.$scope.getFullName = () => { return this.$scope.firstName + ' ' + this.$scope.lastName; }; } } ! // ... ! ͕͜͜૿͑ͦ͏ͳͷ ʹݟ͍͑ͯΔʜ
TS constructor ( public $scope ) { this.init(); ! this.$scope.getFullName
= () => { return this.$scope.firstName + ' ' + this.$scope.lastName; }; } ! private init() { this.$scope.firstName = 'John'; this.$scope.lastName = 'Doe'; }
TS constructor ( public $scope ) { this.init(); } !
private init() { // ... } ! public getFullName(): string { return this.$scope.firstName + ' ' + this.$scope.lastName; } ̕䨱⦼ך㘗
?!
غ؎ٝس怩ח岣䠐 ˖ TDPQFח秡➰ֽגְזְًاحسכ ⹛⡲׃תׇ this.$scope.getFullName = () => { return
// ... }; 何㢌כׯהغ؎ٝسׁגְ
TS constructor ( public $scope ) { this.init(); this.$scope.getFullName =
this.getFullName.bind(this); } ! private init() { // ... } ! public getFullName(): string { return this.$scope.firstName + ' ' + this.$scope.lastName; } 姻׃ֻכCJOE ⢪ְתׅ
ד CJOE׃זֻגְְ 倯岀ָ֮
剑鵚崧遤אא֮ $POUSPMMFSBT邌鎸
<body ng-app> <div ng-controller="SampleCtrl"> <strong>First name:</strong> {{firstName}}<br> <strong>Last name:</strong> {{lastName}}<br>
<strong>Full name:</strong> {{getFullName()}}<br> </div> </body> HTML
<body ng-app> <div ng-controller="SampleCtrl as c"> <strong>First name:</strong> {{c.firstName}}<br> <strong>Last
name:</strong> {{c.lastName}}<br> <strong>Full name:</strong> {{c.getFullName()}}<br> </div> </body> HTML
<body ng-app> <div ng-controller="SampleCtrl as c"> <strong>First name:</strong> {{c.firstName}}<br> <strong>Last
name:</strong> {{c.lastName}}<br> <strong>Full name:</strong> {{c.getFullName()}}<br> </div> </body> HTML ̕呓秛ׅ㢌侧せ ̓㢌侧せفٗػذ؍ խ➰ֽזְהSPPU4DPQF䪔ְ
TS class SampleCtrl { public firstName: string; public lastName: string;
! constructor () { this.init(); } ! private init() { this.firstName = 'John'; this.lastName = 'Doe'; } ! public getFullName(): string { return this.firstName + ' ' + this.lastName; } } ! angular.module('MyAngularJs') .controller('SampleCtrl', [SampleCtrl]);
TS class SampleCtrl { public firstName: string; public lastName: string;
! constructor () { this.init(); } ! private init() { this.firstName = 'John'; this.lastName = 'Doe'; } ! public getFullName(): string { return this.firstName + ' ' + this.lastName; } } ! angular.module('MyAngularJs') .controller('SampleCtrl', [SampleCtrl]); ̕TDPQF♶銲 ̒TDPQF♶銲 ̒UIJTך湫䱸ךفٗػذ؍ח խזךד㘗㹀纏
$POUSPMMFSBT邌鎸כ 5ZQF4DSJQUה湱䚍ְְָ
$POUSPMMFSBTךًٔحز ˖ $POUSPMMFSطأز׃㜥さחծ㢌侧せך ֶַ־ד僇然חז ˖ "OHVMBS+4ך䠐㔳׃זְفٗػذ؍㢌刿 ־ ˖ ׃גծ5ZQF4DSJQUךؙٓأה湱䚍ְְָ
$POUSPMMFSBTךرًٔحز ˖ QSJWBUFזًاحس)5.-♳ד䭷㹀ׅל ⢪ִג׃תֲ ˖ 5ZQF4DSJQU؝ٝػ؎ٓכ)5.-ח㼎׃גכ⫴ַזְ ˖ )5.-♳ד{{c.$scope.firstName}}הׅל غ؎ٝسדⵖꣲדָֹծ׳הⱔꞿ ˖
5ZQF4DSJQU⢪זְז㉏겗זְ
דCJOE 'BDUPSZװ%JSFDUJWFד⢪ִךד ⚕倯鋙ִגֶֻץ׃
5ZQF4DSJQUד ֹׅ剅ֽ
4FSWJDFךⴱ劍⻉
ךח ˖ 4FSWJDFה'BDUPSZך麩ְ 椚鍑ׁגְתַׅ
'BDUPSZ angular.module('MyAngularJs') .factory('MyProvider', ['otherProvider', function (otherProvider) { return new MyProvider(otherProvider);
}]); JS angular.module('MyAngularJs') .service('MyProvider', ['otherProvider', MyProvider]); 4FSWJDF JS
'BDUPSZ angular.module('MyAngularJs') .factory('MyProvider', ['otherProvider', function (otherProvider) { return new MyProvider(otherProvider);
}]); JS angular.module('MyAngularJs') .service('MyProvider', ['otherProvider', MyProvider]); 4FSWJDF JS ̓؎ٝأةٝأ欰䧭׃ג鵤ׅ ؝ٝأزؙٓة♷ִג"OHVMBS+4ָ欰䧭ׅ̓ 4JOHMFUPOדׅխ խ
'BDUPSZ angular.module('MyAngularJs') .factory('MyProvider', ['otherProvider', function (otherProvider) { return new MyProvider(otherProvider);
}]); JS angular.module('MyAngularJs') .service('MyProvider', ['otherProvider', MyProvider]); 4FSWJDF JS 5ZQF4DSJQUד 䪔ְװְׅךכ4FSWJDF
⢪ְⴓֽ ˖ 4JOHMFUPOַծꟼ侧תה0CKFDUַהְֲ麩ְ ˖ 朐䡾⥂㶷כ4FSWJDFח䬐ׇ׆SPPU4DPQFחׇׁץֹ ˖ 'BDUPSZכ0CKFDU鵤ׅךדծًٝغךⰕך嚊䙀ח 鵚ְךꥷכծBOHVMBSCJOE ׅ ˖
⢪ְװְׅ倯דְְה䙼ג 5ZQF4DSJQUד剅ֻז4FSWJDFַ
أ٦ػ٦ؙٓأכ ˖ ؙٓأك٦أ001הְִל竰䪫 ˖ أ٦ػ٦ؙٓأח꧊秈ׇׁג؟ـؙٓأ ⡲לְְךדכ ̔؝ٝأزؙٓةחⰋגך1SPWJEFS床ׅ"OHVMBS+4 խה竰䪫כ湱䚍ָ䝤ְךדծְְ鑐遤ꐪ铎⚥
խNJYJO鑐׃גְָ姻湫ؔأأًדֹזְ
4FSWJDF 5ZQF4DSJQUד剅ְ⢽
TS class MyResource { constructor( private $q: ng.IQService, private $resource:
ng.resource.IResourceService ) { // ... } ! private resource(): IResourceClass { var baseApi = '/api/entities'; var params: any = null; var actions = { getWithEntityId: { method: 'GET', url: baseApi+'/:id', isArray: true} }; return <IResourceClass>this.$resource(baseApi, params, actions); } ! public fetchEntity(id: my.obj.EntityId): IPromiseReturnEntity { var dfd = this.deferAcceptEntity(); ! var query = {id: id}; this.resource().getWithEntityId( query, this.success(), this.failure() ).$promise.then(this.fetchThen(dfd)); ! return dfd.promise; } private fetchThen(dfd: IDeferredAcceptEntity): (res: my.obj.IEntities) => void { return (res) => { var e: my.obj.IEntity = res[0]; dfd.resolve(e); }; } } ! angular.module('MyAngularJs') .service('MyResource', ['$q', '$resource', MyResource]);
class MyResource { constructor( private $q: ng.IQService, private $resource: ng.resource.IResourceService
) { // ... } ! private resource(): IResourceClass { var baseApi = '/api/entities'; var params: any = null; var actions = { getWithEntityId: { method: 'GET', url: baseApi+'/:id', isArray: true} }; return <IResourceClass>this.$resource(baseApi, params, actions); } ! public fetchEntity(id: my.obj.EntityId): IPromiseReturnEntity { var dfd = this.deferAcceptEntity(); ! var query = {id: id}; this.resource().getWithEntityId( TS ̕BOHVMBSEUTך㘗㹀纏ؿ؋؎ٕ崞欽 ٍ̓ؗأز׃זְה鋵ך㘗ה׃גؒٓ٦⳿ׅ ̕ⴽךؿ؋؎ٕד杝荈ח*3FTPVSDF$MBTT㹀纏 խBOHVMBSEUTFYUFOET竰䪫ׇׁגְ
isArray: true} }; return <IResourceClass>this.$resource(baseApi, params, actions); } ! public
fetchEntity(id: number): IPromiseReturnEntity { var dfd = this.deferAcceptEntity(); ! var query = {id: id}; this.resource().getWithEntityId( query, this.success(), this.failure() ).$promise.then(this.fetchThen(dfd)); ! return dfd.promise; } private fetchThen(dfd: IDeferredAcceptEntity): (res: my.obj.IEntities) => void { return (res) => { var e: my.obj.IEntity = res[0]; dfd.resolve(e); }; } } ! angular.module('MyAngularJs') .service('MyResource', ['$q', '$resource', MyResource]); TS ֿֿתדָⰋג䨱⦼ך㘗 ̕杝荈ך㘗 ̓杝荈ך㘗 ̕%*ׅ1SPWJEFSה荈魦ך؝ٝأزؙٓة խ䧭⸆儗ה㣟侁儗חㄎלꟼ侧 ̒➙㔐כꟼ⤘זְ
♧孡חװֺׅ
剑䖓ח 㘗㹀纏ؿ؋؎ٕך鑧
آؑطؙٔأ ˖ BOHVMBSEUTװBOHVMBSSFTPVSDFEUTחכ החַֻآؑطؙٔأָ⳿גֹתׅ ˖ 䫺䫑䠬ָ֮ה׳הꨇ׃ֻ鋅ִַ
BOHVMBSEUT余殛 $resource<T>(); ↓ ng.resource.IResourceClass<T>型のインスタンス .query(); ↓ ng.resource.IResourceArray<T>型のインスタンス .$promise ↓ ng.IPromise<ng.resource.IResourceArray<T>>型のインスタンス
BOHVMBSEUT余殛 ! ݏΜͳ͖ͬͯͨ $resource<T>(); ↓ ng.resource.IResourceClass<T>型のインスタンス .query(); ↓ ng.resource.IResourceArray<T>型のインスタンス .$promise
↓ ng.IPromise<ng.resource.IResourceArray<T>>型のインスタンス
BOHVMBSEUT ng.resource.IResourceClass<T>型のインスタンス .query(); ↓ ng.resource.IResourceArray<T>型のインスタンス .$promise ↓ ng.IPromise<ng.resource.IResourceArray<T>>型のインスタンス .then<TResult>( successCallback:
(promiseValue: T) => TResult, errorCallback?: (reason: any) => TResult, notifyCallback?: (state: any) => any ): IPromise<TResult>
BOHVMBSEUT ng.resource.IResourceClass<T>型のインスタンス .query(); ↓ ng.resource.IResourceArray<T>型のインスタンス .$promise ↓ ng.IPromise<ng.resource.IResourceArray<T>>型のインスタンス .then<TResult>( successCallback:
(promiseValue: T) => TResult, errorCallback?: (reason: any) => TResult, notifyCallback?: (state: any) => any ): IPromise<TResult> 殅䠐ׅץֹזךכծֿך鴟כ Ⰻ鿇דչמהאך㘗せպד֮הְֲֿה չ5䒷侧חה53FTVMU鵤ׅꟼ侧պ䒷侧הׅ
דծ穠㽷5חכ ⡦Ⰵִִי
BOHVMBSEUT余殛 ng.IPromise<ng.resource.IResourceArray<T>> ה5ָطأز׃גְךדծ(promiseValue: T)ך5כ "ng.resource.IResourceArray<T>"Ⰻ⡤䭷ׅկ ! "ng.resource.IResourceArray<T>"ך⚥ך5כ ♧殢剑ⴱծ$resource<T>()ה剅ְ儗ך5կIResourceArray<T>כ"1* ַ鷏גֻ穠卓ךꂁךֿהկ !
אתծךꂁך⦐ղך㘗$resource<T>()ך5ח䭷㹀׃גֶֽ ל.then()ך⚥ד㘗➰ֽׁ朐䡾ד⢪ִ
*OUFSGBDF⢪ֲ ˖ آؑطؙٔأ걼籕ח䪔ֲהծ㘗荈⡤ָ 䒷侧אךדⱄⵃ欽ךד㉏겗דׅ ˖ JOUFSGBDF㢳欽׃ծ؝٦سⰻח5ָ⳿ג ֿזְ״ֲٓحف׃תׅ ˖ *1SPNJTF3FUVSO&OUJUZ *%FGFSSFE"DDFQU&OUJUZזוכ
ְֲ鑐遤ꐪ铎ך劣ծ欰תת׃
椚鍑ָ帾ת ˖ ⯓➂ח״㘗㹀纏ؿ؋؎ٕכ״ֻדֹ גְ ˖ 㘗㹀纏铣הծ%PDVNFOU铣ח 瘝׃ְ椚鍑ָ䖤 ˖ +BWB4DSJQUֽ剅ְגְծֿֿתד 䠐陎׃זְכ׆
㘗ח걾ֲ 5ZQF4DSJQU剅ֲֿ
׀幠耮ָ֮הֲ׀ְׂת׃