ã¯ããã«
AngularJSã¯ãåçã«æŽæ°ãããã³ã³ãã³ãã§1ããŒãžã®Webã¢ããªã±ãŒã·ã§ã³ãäœæããããšãäž»ãªç®çãšãã人æ°ã®ããJavaScriptã©ã€ãã©ãªã§ãã ãã®ã©ã€ãã©ãªã¯ãã¹ãããã¢ã®ããã°ã©ããŒMishka Heveryã«ãã£ãŠäœæãããŸãããMishkaHeveryã¯ãGoogleã§åããŠãããäžåžããJavaScriptãåŠã¶ã¿ã¹ã¯ãåãåããŸããã 圌ã¯ãèšèªãåŠã¶æè¯ã®æ¹æ³ã¯ãããã«åºã¥ããŠç¬èªã®ãã¬ãŒã ã¯ãŒã¯ãäœæããããšã ãšå€æããŸããã AngularïŒãAngulaãã®ããã«èãããæåéããAngularããšèš³ãããïŒã¯ã MVC ïŒM-ã¢ãã«ïŒããŒã¿ïŒãV-ãã¥ãŒïŒãã¥ãŒïŒãC-ã³ã³ãããŒã©ãŒïŒã³ã³ãããŒã©ãŒãå¶åŸ¡ã¬ã€ã€ãŒã¢ããªã±ãŒã·ã§ã³ã®ããžãã¯ãæäŸããŸãïŒã
ããŸããŸãªãœãŒã¹ãã³ã³ãããŒã©ãŒã®ç®çã説æããŸããã€ãŸããã³ã³ãããŒã©ãŒã¯ãŠãŒã¶ãŒã®ã¢ã¯ã·ã§ã³ã«ã®ã¿å¿çããŠã¢ãã«ãå€æŽãããããã®å€æŽã¯ãŠãŒã¶ãŒã®é¢äžãªãã«ã€ã³ã¿ãŒãã§ãŒã¹ã«è¡šç€ºãããŸãã ãŸãã¯ãã³ã³ãããŒã©ãŒãã¢ãã«ã«å€æŽãå ããã ãã§ãªããå¿ èŠã«å¿ããŠåŸç¶ã®åŠçãšãšãã«ã¢ãã«ããå€æŽãåãåãããšãã§ããŸãã è§åºŠã¯2çªç®ã®æŠå¿µãé å®ããŸãã
Angularã¯å€éšã©ã€ãã©ãªããç¬ç«ããŠãããçŽç²ãªJavaScriptã§èšè¿°ãããŠããŸãïŒããã¯å€ãã®å Žåããã©ã¹ãšåŒã°ããŸãïŒã åæã«ãååãšããŠãBootstrap CSSãšçµã¿åãããŠäœ¿çšââããããšããå§ãããŸãã ãŸããAngularã¯ãããšãã°èŠèŠå¹æã®ããã«jQueryãšã®å ±æãå¶éããŸããã ååãšããŠããã¬ãŒã³ããŒã·ã§ã³ïŒãã¶ã€ã³ïŒãç®çãšããä»ã®JSã©ã€ãã©ãªïŒFacebookããŒã ã®Reactãªã©ïŒã¯ãAngularãšäžç·ã«äœ¿çšã§ããŸãã
1.ãã¬ãŒã ã¯ãŒã¯ã®äž»èŠãªãšã³ãã£ãã£ã§ããã¢ãžã¥ãŒã«ãã³ã³ãããŒã©ãŒããã£ã¬ã¯ãã£ããåŒã«ç²ŸéããŸãã
Angularã®åºæ¬æ§é ã¯ã¢ãžã¥ãŒã«ã§ãã æ¬è³ªçã«ã¯ãçžäºæ¥ç¶ãããæ©èœã®ã³ã³ããã§ãã ãããã£ãŠãAngularã§ã®ã¢ããªã±ãŒã·ã§ã³ã®äœæã¯ãã¢ããªã±ãŒã·ã§ã³ã®ååã瀺ãåºæ¬ã¢ãžã¥ãŒã«ã®äœæããå§ãŸããŸãã ãŸãã次ã®ã³ãŒããå«ãapp.jsãã¡ã€ã«ãäœæããŸãã
var app = angular.module('AppName', [ ]);
AppNameã¯ãã¢ããªã±ãŒã·ã§ã³ã®ååã§ãã ãã¡ãããããã¯ããªãã®å¥œã¿ã«åãããŠå€ããããšãã§ããŸãã è§æ¬åŒ§[]ã«ã¯ãã¢ãžã¥ãŒã«ã®æäœã«å¿ èŠãªä»ã®ã¢ãžã¥ãŒã«ãžã®äŸåé¢ä¿ã瀺ãããŠããŸãã ååšããªãå Žåã¯ãåã«ç©ºã®é åã瀺ããŸãã ããã«ã€ããŠã¯åŸã§è©³ãã説æããŸãã
ã³ã³ãããŒã©ãŒ[ã³ã³ãããŒã©ãŒ]
ããã«ã¢ãžã¥ãŒã«ã§ãã³ã³ãããŒã©ãŒãå®çŸ©ããŸãã 圌ã¯äžäººã§ãããå€ãã®å¯èœæ§ããããŸãã ããããç°ãªãååã§åŒã³åºããŸãã
app.controller('StoreController', function(){ this.data = {name: 'Gem', // price : 3.49} // });
ããã§ãHTMLã³ãŒãå ã®ããã€ãã®éèŠãªã¹ãããïŒã¢ãžã¥ãŒã«ããã¶ã€ã³ã«æ¥ç¶ããŸãïŒã ãããè¡ãã«ã¯ãindex.htmlãã¡ã€ã«ãäœæããŸãããã®ãã¡ã€ã«ã§ã¯ãéžæãã<html ng-app = "AppName">ãšããååã®ã¢ãžã¥ãŒã«ã䜿çšããŠããããšãæåã«å®£èšããŸãã
Angularã¯ããã®HTMLå ã§äœ¿çšããã¢ãžã¥ãŒã«ãèªèããŸãã ãŸããã©ã€ãã©ãªèªäœãšãã¡ã€ã«ãã¢ããªã±ãŒã·ã§ã³ã«æ¥ç¶ããŸãã
<script type="text/javascript" src="angular.min.js"></script> <script type="text/javascript" src="app.js"></script>
åŒ[åŒ]
HTMLå ã§ã¯ãå€æ°ã¯äžæ¬åŒ§{{}}ã§ç€ºãããŸãã ãã®å€æ°ã¯ãæåã«ã³ã³ãããŒã©ãŒã§å®çŸ©ããå¿ èŠããããŸãã ãŸãã{{}}å ã§ã¯ãå€æ°ã ãã§ãªãåŒãæå®ã§ããŸãã äŸïŒ{{'PriceïŒ' + store.data.price + '$'}}ã
ãã©ãŠã¶ã¯JSãå®çŸ©ããåã«ç»åãããŒãããããšãããããIMGã¿ã°ã®srcå±æ§å ã§ã¯åŒã䜿çšã§ããªãããšã«æ³šæããŠãã ããã ãããã£ãŠãAngularã¯ç¹å¥ãªng-srcãã£ã¬ã¯ãã£ãã䜿çšããŸãã
<img ng-src="{{expression}}"/>
æ什
ãã£ã¬ã¯ãã£ãã¯ãHTMLã¿ã°å ã§çŽæ¥äœ¿çšãããç¹å¥ãªå±æ§ã§ããããã®ãã£ã¬ã¯ãã£ãã«å¯ŸããŠå®çŸ©ãããããžãã¯ã«åŸã£ãŠãAngularã«ãã£ãŠåŠçãããŸãã ããšãã°ãããŒã¿ã衚瀺ããå¿ èŠããããããã¯å ã§ããã®ããŒã¿ãæäŸããã³ã³ãããŒã©ãŒã®ååïŒãã®å Žåã¯StoreControllerïŒãæå®ããŸãã ããã¯ãçµã¿èŸŒã¿ã®ng-controllerãã£ã¬ã¯ãã£ãã䜿çšããŠè¡ãããŸãã
<div ng-controller="StoreController as store"> {{store.data.price}} // 3.49 <\div>
ä»ã®äžè¬çã«äœ¿çšãããçµã¿èŸŒã¿ãã£ã¬ã¯ãã£ãã¯æ¬¡ã®ãšããã§ãã
ng-show-å€ãFalseã®å ŽåãHTMLèŠçŽ ãé衚瀺ã«ããŸãïŒdisplayïŒnoneã䜿çšïŒã ã¢ãã«ã®ç¶æ ã«å¿ããŠã€ã³ã¿ãŒãã§ã€ã¹èŠçŽ ãåé€ããå¿ èŠãããå Žåã«åœ¹ç«ã¡ãŸãã ããšãã°ã販売ãããŠãã補åã®å Žåã[è³Œå ¥]ãã¿ã³ãèªåçã«åé€ããŸãã
ng-hideã¯ng-showã®éã§ãã ã€ãŸã å€ãTrueã®å ŽåãèŠçŽ ãé衚瀺ã«ããŸãã
ng-repeat -foreaché¢æ°ãšæå³ã䌌ãŠããŸãã ã€ãŸã HTMLãããã¯ã«å«ãŸããã¿ã°ãç¹°ãè¿ããŸãã ããšãã°ãå¥ã®è£œåãã³ã³ãããŒã©ãŒã«è¿œå ããŸãã
app.controller('StoreController', function(){ this.data = [{name: 'Gem', price : 3.49}, {name: 'Emerald', price : 17.99}] });
ããã§ãäž¡æ¹ã®è£œåã®äŸ¡æ Œã衚瀺ããããã«ãng-repeatã䜿çšããŸãã
<div ng-controller="StoreController as store"> <div ng-repeat="product in store.data"> <li>{{product.name}}: ${{product.price}} <\div> <\div>
åºåã§ã¯æ¬¡ã®ããã«ãªããŸãã
å®ç³ïŒ3.49ãã«
ãšã¡ã©ã«ãïŒ17.99ãã«
Angularã«ã¯ãããŸããŸãªã«ãŒãã³ã¿ã¹ã¯ã解決ããããã«èšèšãããä»ã®å€ãã®çµã¿èŸŒã¿ãã£ã¬ã¯ãã£ãããããŸãã
2.ãã£ã«ã¿ãŒããã£ã¬ã¯ãã£ããã¯ãªãŒã³ã³ãŒã
ãã£ã«ã¿ãŒã¯åŒããã³ãã£ã¬ã¯ãã£ãã§äœ¿çšãããããŒã¿åœ¢åŒãå€æŽããããã«èšèšãããŠããŸãã
{{ããŒã¿| ãã£ã«ã¿ãŒ[ïŒãªãã·ã§ã³1] [ïŒãªãã·ã§ã³2]}}
<li>{{product.name}}: {{product.price | currency:"$":0}} // Emerald: $17 ============= = ======== === = | | | | +- () | | | +- () | | +- () | +- pipe ("" ) +-
ãã£ã«ã¿ãŒã®äŸïŒ
<b>date</b> {{'1388123412323' | date:'MM/dd/yyyy @ h:mma'}} // 12/27/2013 @ 12:50AM
<b>uppercase</b> {{'octagon gem' | uppercase}} // OCTAGON GEM
<b>limitTo</b> ᅩ{{'My Description' | limitTo:8}} // My Descr ᅩ<li ng-repeat="product in store.products | limitTo:3"> //
<b>orderBy</b> <li ng-repeat="product in store.products | orderBy:'-price'"> //
Angularã®çµã¿èŸŒã¿ãã£ã«ã¿ãŒã®å®å šãªãªã¹ã ã
ããã§ãã³ãŒãã®ã¯ãªãŒã³ãã«ã€ããŠå°ã説æããŸãã ãããè¡ãã«ã¯ã次ã®äŸã䜿çšããŸãã
<section ng-init="tab = 1"> <ul class="nav nav-pills"> <li ng-class="{active:tab === 1}"> <a href ng-click="tab = 1">Description</a> </li> <li ng-class="{active:tab === 2}"> <a href ng-click="tab = 2">Specifications</a> </li> <li ng-class="{active:tab === 3}"> <a href ng-click="tab = 3">Reviews</a> </li> </ul> <div class="panel" ng-show="tab === 1"> <h4>Description </h4> <p>{{product.description}}</p> </div> </section>
ã芧ã®ãšãããããžãã¯ã¯HTMLã«çŽæ¥å«ãŸããŠããŸãããããã¯ãã¡ããæ£ãããªããããã³ã³ãããŒã©ãŒã¬ãã«ã«ç§»åããå¿ èŠããããŸãã ãããè¡ãã«ã¯ãã³ã³ãããŒã©ãŒé¢æ°ã«æ¬¡ã®ã³ãŒããè¿œå ããŸãã
app.controller("PanelController", function(){ // this.tab = 1; // this.selectTab = function(setTab) { this.tab = setTab; }; // this.isSelected = function(checkTab){ return this.tab === checkTab; }; });
ããžãã¯ã¯çŸåšã³ã³ãããŒã©ãŒå ã«ãããããã«å¿ããŠHTMLãå€æŽããã ãã§ãã
<section ng-controller="PanelController as panel"> <ul class="nav nav-pills"> <li ng-class="{ active: panel.isSelected(1) }"> <a href ng-click="panel.selectTab(1)">Description</a> </li> <li ng-class="{ active: panel.isSelected(2) }"> <a href ng-click="panel.selectTab(2)">Specifications</a> </li> <li ng-class="{ active: panel.isSelected(3) }"> <a href ng-click="panel.selectTab(3)">Reviews</a> </li> </ul> <div class="panel" ng-show="panel.isSelected(1)"> <h4>Description </h4> <p>{{product.description}}</p> </div> </section>
3.ãã©ãŒã ã®äœæäŸã®ã¢ãã«ãšããªããŒã¿ãŒ
Angularã®äž»ãªæ©èœã®1ã€ã¯ãããããåæ¹åããŒã¿ãã€ã³ãã£ã³ã°ã§ããããã¯ãïŒãã©ãŒã ã®ïŒããŒãžã®ããŒã¿ãå€æŽãããšã¢ãã«ïŒããŒã¿ãæ ŒçŽãããªããžã§ã¯ãïŒã®ããŒã¿ãèªåçã«å€æŽãããã¢ãã«ã®ããŒã¿ãå€æŽãããšé¢é£ããããŒã¿ãèªåçã«æŽæ°ãããããšãæå³ããŸãããŒãžã®æ å ±ã äžèŠæ··ä¹±ããŠããããã«èŠããã®ã§ãäŸã䜿ã£ãŠèª¬æãã䟡å€ããããŸãã
<form name="reviewForm"> <blockquote> <b>Stars: {{review.stars}}</b> {{review.body}} <cite>by: {{review.author}}</cite> </blockquote> <select ng-model="review.stars"> <option value="1">1 star</option> <option value="2">2 stars</option> . . . </select> <textarea ng-model="review.body"></textarea> <label>by:</label> <input ng-model="review.author" type="email" /> <input type="submit" value="Submit" /> </form>
ããšãã°ã<select ng-model = "review.stars">ã»ã¬ã¯ã¿ãŒã®ããŒã¿ãå€æŽãããšãåŒ{{review.stars}}ã䜿çšããŠããŒãžã«èªåçã«è¡šç€ºãããŸã
ãããã£ãŠããã¥ãŒã¬ãã«ïŒãã¥ãŒïŒããã®ããŒã¿ã¯ããŒã¿ã¹ãã¬ãŒãžã¬ã€ã€ãŒïŒã¢ãã«ïŒã«è»¢éããããã®éãåæ§ã§ãã
ãŸãã ng-modelãã£ã¬ã¯ãã£ãã䜿çšããŠã¢ãã«ããŒã¿ãéä¿¡ããå ŽåãããŒã¿ãæ€èšŒãããæ€èšŒã®çµæã«åºã¥ããŠç¹å¥ãªã¯ã©ã¹ãèšå®ããããã®ä»å€ãã®æçšãªã€ãã³ããçºçããããšã«æ³šæããŠãã ããã
次ã«ããã©ãŒã ãã³ã³ãããŒã©ã«æ¥ç¶ãããã®åŠçãä¿èšŒããŸãã ãŸãã addReviewã¡ãœãããå«ãã³ã³ãããŒã©ãŒèªäœãäœæããŸãããã®ã¡ãœããã¯ããã©ãŒã ãéä¿¡ããããšãã«åŒã³åºãå¿ èŠããããŸãã
app.controller("ReviewController", function(){ this.review = {}; // this.addReview = function(product) { product.reviews.push(this.review); // this.review = {}; // }; });
次ã«ããã©ãŒã ã«å¿ èŠãªèª¿æŽãè¡ããŸã
<form name="reviewForm" ng-controller="ReviewController as reviewCtrl" ng-submit="reviewCtrl.addReview(product)"> <blockquote> <b>Stars: {{reviewCtrl.review.stars}}</b> {{reviewCtrl.review.body}} <cite>by: {{reviewCtrl.review.author}}</cite> </blockquote> <select ng-model="reviewCtrl.review.stars"> <option value="1">1 star</option> <option value="2">2 stars</option> . . . </select> <textarea ng-model="reviewCtrl.review.body"></textarea> <label>by:</label> <input ng-model="reviewCtrl.review.author" type="email" /> <input type="submit" value="Submit" /> </form>
æ€èšŒãè¿œå ããŸãã ãŸãã å¿ é ã®åŒæ°ã䜿çšããŠãã©ãŒã ãã£ãŒã«ããå¿ é ãšããŠããŒã¯ããæå¹ãªãã©ãŒã ã®ããŒã¿ã®ã¿ãä¿åããããšããæ¡ä»¶ãè¿œå ããŸãã ãããè¡ãã«ã¯ã novalidateãªãã·ã§ã³ãFormã¿ã°ã«è¿œå ãããšãããã©ã«ãã®HTMLæ€èšŒãç¡å¹ã«ãªãã reviewFormã$ Validæ¡ä»¶ãè¿œå ãããŸããããã«ããã addReviewã¡ãœããã¯æå¹ãªãã©ãŒã ã§ã®ã¿åŒã³åºãããŸãã
<form name="reviewForm" ng-controller="ReviewController as reviewCtrl" novalidate ng-submit="reviewForm.$valid && reviewCtrl.addReview(product)"> <blockquote> <b>Stars: {{reviewCtrl.review.stars}}</b> {{reviewCtrl.review.body}} <cite>by: {{reviewCtrl.review.author}}</cite> </blockquote> <select ng-model="reviewCtrl.review.stars" required> <option value="1">1 star</option> <option value="2">2 stars</option> . . . </select> <textarea ng-model="reviewCtrl.review.body" required></textarea> <label>by:</label> <input ng-model="reviewCtrl.review.author" type="email" required/> <div> reviewForm is {{reviewForm.$valid}} </div> <input type="submit" value="Submit" /> </form>
typeå±æ§ã䜿çšããŠæå®ãããç¹å®ã®ã¿ã€ãã®ãã¹ãŠã®ãã£ãŒã«ãã¯ãæ£ããå ¥åã®ããã«ãã§ãã¯ãããŸãã ãã®å ŽåãAngularã¯æ€èšŒç¶æ ã«å¿ããŠç¹å®ã®CSSã¯ã©ã¹ããã£ãŒã«ãã«è¿œå ããŸãã
ãããã£ãŠãããšãã°ãé»åã¡ãŒã«ã¿ã€ãã®å Žåã確ç«ãããã¯ã©ã¹ã¯æ¬¡ã®ããã«å€æŽãããŸãã
.ng-pristine .ng-invalid //åæç¶æ ïŒã¯ãªãŒã³ãç¡å¹ïŒ
.ng-dirty .ng-invalid //ç¡å¹ãªã¡ãŒã«ïŒå ¥åæžã¿ãç¡å¹ïŒ
.ng-dirty .ng-valid //æå¹ãªé»åã¡ãŒã«ïŒèšå ¥æžã¿ãæå¹ïŒ
ãããã£ãŠããããã®ã¯ã©ã¹ã«é©ããCSSã«ãŒã«ãèšå®ã§ããŸãã ãã®ãããããšãã°ã誀ã£ãŠå ¥åããããã£ãŒã«ãã®åšãã«èµ€ããã¬ãŒã ããããæ£ããå ¥åããããã£ãŒã«ãã®åšãã«ç·è²ã®ãã¬ãŒã ããããŸãã
.ng-dirty.ng-invalid { border-color: #FA787E; // } .ng-dirty.ng-valid { border-color: #78FA89; // }
çŸåšãå ¥åãã£ãŒã«ãã§ã¯æ¬¡ã®ããªããŒã¿ãŒããµããŒããããŠããŸãã
- æé
- æ¥ä»
- æ¥æããŒã«ã«
- é±
- æ
- æ°
- ããã¹ã
- ã¡ãŒã«ïŒæå°èŠä»¶ïŒ
- urlïŒæå°èŠä»¶ã®éµå®ïŒ
- ãã§ãã¯ããã¯ã¹
- ã©ãžãª
4.ç¬èªã®ãã£ã¬ã¯ãã£ããäœæãã
Angularã®åªããæ©èœã®1ã€ã¯ãã«ã¹ã¿ã ãã£ã¬ã¯ãã£ããäœæã§ããããšã§ãã èšãæããã°ãç¬èªã®ããžãã¯ãæã€ç¬èªã®HTMLã¿ã°ãäœæããHTMLå šäœã眮ãæããããšãã§ããŸãã ããšãã°ãæ¿å ¥ããŠ<editor>ã¿ã°ãäœæããããŒãžã«ããã¹ããšãã£ã¿ãŒãååŸã§ããŸãã
ããã«ãããã¢ããªã±ãŒã·ã§ã³ã®æ§é ãå®å šã«äŒããè¡šçŸåè±ããªã³ãŒããäœæã§ããŸãã ãããŠãã¡ãããããã«ããã³ãŒãã®åå©çšãå€§å¹ ã«æ¹åãããŸãã
ååãšããŠãHTMLã³ãŒãã®ãã©ã°ã¡ã³ãã®åå©çšã«é¢ããŠãAngularã¯èªç±ã«ng-includeãã£ã¬ã¯ãã£ãã䜿çšããŸããããã«ãããã³ãŒãã®äžéšãå¥ã®ãã¡ã€ã«ã«åãåºãããšãã§ããŸãã 次ã®ããã«ãªããŸãã
<h3 ng-include="'product-title.html'"></h3>
ååãå²ââãäžéåŒçšç¬Šã«æ³šæããŠãã ããã ãããã¯ããã¡ã€ã«åãå«ãå€æ°ã§ã¯ãªããååãæã€æååã§ããããšãAngularã«äŒããŸãã
ãããã£ãŠãproduct-title.htmlãã¡ã€ã«ã«ã¯ãAngularãH3ã¿ã°ã®ã³ã³ãã³ããšããŠæ¿å ¥ããã³ãŒããå«ãŸããŸãã äŸïŒ
{{product.name}} <em class="pull-right">${{product.price}}</em>
ã芧ã®ãšããããã®æ¹æ³ã§æ¿å ¥ãããã³ãŒãã«ã¯ããã®ãããªãã©ã°ã¡ã³ããäžè¬çãªã³ãŒãã«æ¿å ¥ããåŸã«åŠçãããåŒãå«ãŸããŠããå ŽåããããŸãã
ãã ããç¬èªã®ãã£ã¬ã¯ãã£ãã®äœæã«æ»ããŸãã ããã¯æ¬¡ã®ããã«è¡ãããŸãã
app.directive('productTitle', function(){ return { restrict: 'E', // E - Element templateUrl: 'product-title.html' }; });
ããã§ããããHTMLã¿ã°ãšããŠäœ¿çšã§ããŸãã HTMLã®productTitleãã£ã¬ã¯ãã£ãã®ååã¯product-titleã«å€æãããããšã«æ³šæããŠãã ããã
<product-title></product-title>
ã¿ã°ãã«ã¹ã¿ãã€ãºããå¥ã®æ¹æ³ã¯ãç¬èªã®å±æ§ãäœæããããšã§ãã ãã®å Žåããã£ã¬ã¯ãã£ããäœæãããšãã«ãEïŒèŠçŽ ïŒã®ä»£ããã«ã restrictããããã£ã«AïŒå±æ§ïŒãæå®ããå¿ èŠããããŸãã ãã®åŸãHTMLã¿ã°ã¯æ¬¡ã®ããã«ãªããŸãã
<h3 product-title></h3>
ãŠã£ãžã§ããããç¬èªã®ããžãã¯ãå«ãä»ã®å®å šã«ç¬ç«ããèŠçŽ ã®æ¿å ¥ã«ã¯ãrestrictïŒEãã䜿çšããmixinã«ã¯ãrestrictïŒAãã䜿çšããããšããå§ãããŸãã
ãŠã£ãžã§ããã«é¢ããŠã¯ãå¿ èŠãªãã¹ãŠã®ããžãã¯ãå«ãã³ã³ãããŒã©ãŒãªãã§ã¯å®è¡ã§ããŸããã Angularã§ã¯ãããã€ãã®æ¹æ³ã§ãããå®è£ ã§ããŸãã ãŸãã ng-controllerå±æ§ãè¿œå ããã ãã§ãïŒ
<product-panels ng-controller = "ããã«ãšããŠã®PanelController">
ãã ãããã£ã¬ã¯ãã£ããäœæããé¢æ°å ã§ã³ã³ãããŒã©ãŒããããã£ã䜿çšããæ¹ãé©åã§ãã
app.directive('productPanels', function(){ return { restrict: 'E', templateUrl: 'product-panels.html', controller: function(){ ... // }, controllerAs: 'panels' // }; });
5.äŸåé¢ä¿ãšãµãŒãã¹
äŸåé¢ä¿ã¯ãäœæããæ°ããã¢ãžã¥ãŒã«ã®æ©èœã確ä¿ããããã«å¿ èŠãªã¢ãžã¥ãŒã«ã§ãã ãŸããç°ãªãã¢ãžã¥ãŒã«éã§ããžãã¯ã®ç¬ç«ããéšåãåæ£ãããããšã«ãããã¢ããªã±ãŒã·ã§ã³ã®æ§é ãæ¹åããæ¹æ³ãšèããããšãã§ããŸãã 次ã®äŸãèããŠã¿ãŸãããã
// app.js (function(){ var app = angular.module('store', []); app.controller('StoreController', function(){ . . . }); app.directive('productTitle', function(){ . . . }); app.directive('productGallery', function(){ . . . }); app.directive('productPanels', function(){ . . . }); })();
å¿ èŠãªæè»æ§ã«å¿ããŠãç¬ç«ããã¢ãžã¥ãŒã«ã§ãã£ã¬ã¯ãã£ããäœæããããåã¢ãžã¥ãŒã«ã§ç¬èªã®ã¢ãžã¥ãŒã«ãäœæãããããããšã¯è«ççã§ãã
ãã ãããã®å Žåãã¢ããªã±ãŒã·ã§ã³ã®æ§é ãé床ã«è€éã«ããªãããã«ãå ±éã®ã¢ãžã¥ãŒã«ãåé€ããŸãã
// products.js (function(){ var app = angular.module('store-products', []); app.directive('productTitle', function(){ . . . }); app.directive('productGallery', function(){ . . . }); app.directive('productPanels', function(){ . . . }); })();
次ã«ãstore-productsã¢ãžã¥ãŒã«ãstoreã¢ãžã¥ãŒã«ã®äŸåé¢ä¿ãšããŠæå®ããŸãã
// app.js (function(){ var app = angular.module('store', [store-products]); app.controller('StoreController', function(){ . . . }); })();
æåŸã®ã¹ãããã¯ãæ°ãããã¡ã€ã«ãå¿ããã«å«ããããšã§ãã
// index.html <!DOCTYPE html> <html ng-app="store"> <head> . . . </head> <body ng-controller="StoreController as store"> . . . <script src="angular.js"></script> <script src="app.js"></script> <script src="products.js"></script> </body> </html>
ãã®çµæãæ©èœã«åºã¥ããŠã¢ãžã¥ãŒã«ãåå²ããŸããã
app.js-ng-appãã£ã¬ã¯ãã£ãã䜿çšããæäžäœã¢ãžã¥ãŒã«ãã©ã°ã€ã³ãå«ãŸããŠããŸãã
products.js-補åããã³è£œåã®ã¿ã®ãã¹ãŠã®æ©èœãå«ãŸããŠããŸãã
ãŸããäŸåé¢ä¿ãšããŠãAngularã«çµã¿èŸŒãŸããŠããããŸããŸãªæšæºæ©èœãæäŸãããµãŒãã¹ãæå®ã§ããŸãã çµã¿èŸŒã¿ãµãŒãã¹ã®ååã¯$ã§å§ãŸããŸãã
æã人æ°ã®ãããµãŒãã¹ã®äŸã¯æ¬¡ã®ãšããã§ãã
$ http -XMLHttpRequestãä»ãããµãŒããŒãšã®éä¿¡ã
$ log-ãã©ãŠã¶ã³ã³ãœãŒã«ã«ã¡ãã»ãŒãžãèšé²ããŸãã
$ filter-é åå ã®ããŒã¿ããã£ã«ã¿ãŒããŸãã
... å®å šãªãªã¹ã ã
ã³ã³ãããŒã©ãŒã«äŸåæ§æ³šå ¥ãå«ããäŸã
app.controller('SomeController', [ '$http', '$log', function($http, $log){ var store = this; store.products = []; $http({ method: 'GET', url: '/products.json' }).success(function(data, status, headers, config) { $log.info(status); store.products = data; }) } ]);