ã¾ããã
AngularUI Routerã¯AngularJSã®ã«ã¼ãã£ã³ã°ã¢ã¸ã¥ã¼ã«。AngularJSã®æ¨æºã®ã«ã¼ãã£ã³ã°æ©è½ããé«æ©è½ã§、ãã¼ã¸å ã«è¤æ°ã®viewãæã£ãã、
é層åãããviewãå©ç¨ãããã¨ãªã©ãã§ãã。
æçµçãªããã¸ã§ã¯ãã®ç®æ¨ã¯ngRouteã«åã£ã¦ä»£ãã£ã¦æ¨æºæè¼ããããã¨ã ããã§、AngularJSæ¬ä½ãèå³ã示ãã¦ããããã(GitHubã®wikiã«æ¸ãã¦ãã)。
ã§、ã¡ããã£ã¨è§¦ã£ã¦ã¿ã¦、å®éã®ä½¿ãæ¹ã«è§¦ãã解説è¨äºã¯å°ãªããããªã®ã§ãã£ãã使ãæ¹ãæ¸ã。
https://github.com/angular-ui/ui-router/wiki
ã¡ãªã¿ã«ä¸è¨ã®å ¬å¼ã®wikiãèªãã°åãããã¨ããæ¸ãã¦ãªã。
ãã¨Qiitaã«æç²çãæ¸ããã®ã§、ç´°ãã説æãè¦ããªã人ã¯ãã¶ããã£ã¡ã®ããããããã。
AngularJS - AngularUI Routerã®ä½¿ãæ¹ - Qiita
ãµã³ãã«
以ä¸ã§ãã£ã¦ãããã¨ãã ãããçãè¾¼ãã ãµã³ãã«ããã。
å³å´ã®ã¡ãã¥ã¼ã®Codeãæ¼ãã°åãã¡ã¤ã«ã、Editãæ¼ãã°Plunkerã§ç·¨éã§ãã。Plunkerã§ããããã³ã¼ããå¤ãã¦ã¿ãããã¦è©¦ãã¦ã¿ãã¨ãããããããããããªã(ç¥ã£ã¦ãã¨æããã©、Plunkerã§ç·¨éããããã¦ãå¥ã«ãã£ã¡ã®ãµã³ãã«ãå£ãããããªãã®ã§å®å¿ãã¦ãã)
ãã¡ãã¡å¯¾å¿ããã¦èª¬æãããã¨ã¯ããªã。
ã¤ãããã
ã¢ã¸ã¥ã¼ã«ãªã®ã§、ãã¦ã³ãã¼ããããæ®éã®ã¢ã¸ã¥ã¼ã«ã¨åãããã«èªã¿è¾¼ã。ã¡ãªã¿ã«AngularJS Ver1.2ããæ¨æºã®ã«ã¼ãã£ã³ã°æ©è½ãã¢ã¸ã¥ã¼ã«åããã¦ã。
ãªã®ã§ãã£ããã®ç§»è¡ã ã¨、ngRouteãèªã¿è¾¼ãé¨åãui.routerã«æ¸ãæããã°ãã。
ngRouteã¨ã®å¯¾æ¯ã§æ¸ãã¦ããã¨、
$route -> $state
$routeParams -> $stateParams
$routeProvider -> $stateProvider
ng-view -> ui-view
ã®ãããªæãã§ç½®ãæãã。
ã¡ã½ããåã¯åãã«ãã¦ããã¨ããããã、使ãã¾ãããã¨ããããã。
ãã¨ãã°$routeParamsãªããã¯、$stateParamsã«ç½®ãæããã ãã§ä½¿ãã。
ã¡ãªã¿ã«$locationProvider(html5Modeè¨å®ãããã¤)ã¯ngRouteã¨é¢ä¿ãªãã®ã§
ãã®ã¾ã¾。
$stateProvider
$stateProviderã®stateã¡ã½ããã§ã«ã¼ãã£ã³ã°ã®è¨å®ããã。ngRouteã§ã®$routeProvider.whenã$stateProvider.stateã«ç½®ãæãã。
ã§、è¨å®ã¯ã±ã£ã¨è¦ä¼¼ããããªããã ãã©、èãæ¹ã¯ã¡ãã£ã¨éã。
ngRouteã¯ã·ã³ãã«ã§、ç¹å®ã®URLã«æ¥ããã¢ããªå ¨ä½ã§å¯ä¸ã®ng-viewã«å¯¾ãã¦、æå®ã®ãã³ãã¬ã¼ãã¨ã³ã³ããã¼ã©ãåãè¾¼ãã¨ããã ãã®ãã®ã 。è¨å®ããã®ã¯URLã¨ãã³ãã¬ã¼ãããã³ã³ã³ããã¼ã©ã¼ã®å¯¾å¿é¢ä¿ã«ãªã。
ããã«å¯¾ãã¦ui-routerã¯state(ç¶æ )ãè¨å®ãã。stateãã¾ãå ã«ãã、ãã®stateã«å¯¾å¿ããURLãè¨å®ã、ã¾ã、ãã®stateã®ã¨ã、ã©ã®view(è¤æ°ãããå¾ã)ã«ãã³ãã¬ã¼ãã¨ã³ã³ããã¼ã©ã¼ãå½ã¦ããã¨ããè¨å®ããã。
stateã¯é層ãæã¡、ãããã§åºåã£ã¦æå®ããã。
ã¤ã¾ãitemsã¨ããstateãè¨å®ãã¦、items.detailã¨ããstateãè¨å®ããã¨、items.detailã¯itemsã®åã¨ãã¦ä½æããã。åã¨ãã¦ä½æãããã¨、viewã§è¨å®ãããã³ãã¬ã¼ãã表示ããä½ç½®ã親ã®å å´ã«ãªã£ãã、URLã親ã®URLã«ç¶ãæãã«ãªã。ãã£ã¨ãããã¯ä½ãæå®ããªããã°ãããªãã¨ããã ãã§、è¨å®æ¬¡ç¬¬ã§å¤æ´ã§ãã(å¾è¿°)。
ã¨ã«ãã、ngRouteã¯URLãåºæºã«ãã¦åä½ããã、ui-routerã¯stateãåºæºã«ãªã。
ãªã®ã§è¨å®ã以ä¸ã®ãããªæãã«ãªã。
$routeProvider(url,{è¨å®}) → $stateProvider(stateå,{è¨å®})
ãã¨ãã°/emp/12345ã¿ãããªURLããã、empã ããªã社å¡ä¸è¦§、12345ã渡ãããã詳細ã¨ãããããªè¨è¨ãªã、以ä¸ã®ãããªã³ã¼ãã«ãªã。
ngRouteã®å ´å
$routeProvider .when("/emp",{ templateUrl:"list.html" ,controller:"ListCtrl" }) .when("/emp/:empID"){ templateUrl:"emp.html" ,controller:"EmpCtrl" };ui-routeã®å ´å
$stateProvider .state("emp",{ url:"/emp" ,templateUrl:"list.html" ,controller:"ListCtrl" }) .state("emp.detail",{ url:"/:empID" ,templateUrl:"emp.html" ,controller:"EmpCtrl" });ã¨ããæãã«ãªã。
ä¸ã§ãæ¸ãã¦ããemp.detailã¯empã®åãªã®ã§、:empIDã¨ããUrlã¯、empã®Url(/emp)ã«ç¶ã。
ã¤ã¾ã/emp/:empIDã¨ãªãã®ã§、ngRouteã¨åãURLã«ãªã。
ãã£ã¨ã、ngRouteã®å ´å、ãã¹ã¦ã®ãã³ãã¬ã¼ãã¯å¸¸ã«åä¸ã®ng-viewã«è¡¨ç¤ºãããã、ui-routerã®å ´åãã®è¨å®ã ã¨emp.htmlã¯list.htmlã®ä¸ã®ui-viewã«è¡¨ç¤ºããã。
ã¤ã¾ãä¸è¦§ã®ãªã¹ãã®ãã¼ã¸ã®ä¸é¨ã«è©³ç´°ã表示ããããããªæãã«ãªã。
ã§、å ã«æ¸ããã¨ãã、ngRouteã¨åãããã«åä¸ã®viewã«è¡¨ç¤ºãããã¨ãã§ãã。
ãã®ããã«ã¯è¡¨ç¤ºå ã®viewãæå®ããã°è¯ã。ãã®ããã«ã¯viewã®ååã®æå®ã¨、åç §å ã®viewã絶対æå®ãããã¨ãå¿ è¦ã«ãªãã®ã§、é ã«èª¬æãã。
viewã®ååä»ã
表示å ã®viewã¯ååãã¤ãããã¨ãã§ã、ããã«ããä¸åº¦ã«è¤æ°æå®ãããã§ãã。<div ui-view="view1"></div> <div ui-view="view2"></div>ä¸è¨ã®ã¿ã°ã®viewãè¨å®ããå ´å、
.state("emp.detail"),{ url:"/:empID" ,views:{ view1:{ templateUrl:"view1.html" ,controller:"View1Ctrl" } ,view2:{ templateUrl:"view1.html" ,controller:"View1Ctrl" } } }ã®ããã«è¨å®ãã。viewsã¯ä¿æããããããã£åãviewã®ååã«å¯¾å¿ãã。
ã¡ãªã¿ã«æåã®ã³ã¼ãã§ã¯ååãæå®ãã¦ããªãã、ããã¯ä»¥ä¸ã®è¨å®ã¨åãã 。
.state("emp.detail"),{ url:"/:empID" ,views:{ "":{ templateUrl:"emp.html" ,controller:"EmpCtrl" } } }ããã§ãåé¡ãªãåä½ãã。
ã¡ãªã¿ã«AngularJSã®è©±ããã¯ããè±ç·ãããJavaScriptã§ããããã£åã«ä¸è¨ã®ãããªç©ºæåããã¤ãã³、ã¢ãããã¼ã¯ãªããã使ã£ããããã¨ãã¯äºéå¼ç¨ç¬¦(")ã§å²ã¾ãªãã¨ã¨ã©ã¼ã«ãªã。
ã§、ä½ã§ãããªãã¨ãæ¸ããã¨è¨ãã¨、viewsã®ããããã£ã§ã¢ãããã¼ã¯ã使ãã°、表示対象ã®viewã®ä½ç½®ã親ã¨é¢ä¿ãªã絶対æå®ãããã¨ãã§ããããã 。
viewã®çµ¶å¯¾・ç¸å¯¾æå®
ç»é¢é·ç§»ã¨URLã®é層ã¯å¸¸ã«å¯¾å¿ããããã§ã¯ãªã。ãã¡ã¤ã©ã¼ã¨ã常ã«é層åãããç»é¢æ§é ãªãã¨ããã、ä¸çªä¸ã®ãµã³ãã«ã¨åãããã«ç¤¾å¡ã®ä¸è¦§ãã、社å¡ã®è©³ç´°ãé¸ã³、ãã®ç¤¾å¡ã®æ稿ããç»åä¸è¦§ãã»ã¼ç»é¢å ¨åã«å±éããã、ãªãã¦ãã¨ããããã。ãã®å ´å、URLä¸ã¯è¦ªåé¢ä¿ããã£ã¦ã、ç»åä¸è¦§ã®ç»é¢ã¯è¦ªã®è¡¨ç¤ºä½ç½®ãä¸æ¸ããããã¨ã«ãªã。
(ç»åä¸è¦§ãã¼ã¸ãé層çã«è©³ç´°ã®ä¸ã«å ¥ãå¿ è¦ã¯ãªãã¨ããããã¨ã¯ãã¦ãã)
(ãã¦ãããã©、ãã¾ãè¨è¨ãªãè¯ãæãã«é層åã§ããã®ãããããªã)
ã¨ããã、viewsã®ããããã£åã¯åç´ã«ååã ãæå®ããã¨、親ã®æã¤ãã¥ã¼åã«ãªã。
ã ããã¥ã¼å@ã¹ãã¼ãåã®ããã«æ¸ãã°、ç´æ¥è¡¨ç¤ºå¯¾è±¡ã®ãã¥ã¼ãæå®ã§ãã。ã¤ã¾ã絶対æå®ã 。
ã¡ãªã¿ã«ãã¥ã¼å@ã§çµããå ´åã¯、ä¸çªä¸ä½ã®é層ã®ui-viewã«ãªã。
ä¸çªä¸ä½é層ã®ãã¥ã¼ãååç¡ãã®å ´å、ãã "@"ã§æå®ãããã¨ãã§ãã。
åãã、åã¹ãã¼ãã®ååç¡ããã¥ã¼ã¯、"@ã¹ãã¼ãå"ã¨ããå½¢ã§æå®ãã。
.state("emp.detail.picture"),{ url:"/all" ,views:{ "@emp":{ templateUrl:"picture.html" ,controller:"PictureCtrl" } } }ãã®ã³ã¼ãã ã¨、empã®æã¤ååç¡ãã®ãã¥ã¼ã«è¡¨ç¤ºããã。
ã¤ã¾ãç¾å¨emp.detailã表示ããã¦ããä½ç½®ãå·®ãæ¿ãããã。
ãã®ä»è¨å®
è¨å®å´ã§æ¸ããããã¨ã¯ã ãããæ¸ããã®ã§ãã¨ã¯é©å½ã«åæ。詳ããã¯å ¬å¼ã®Wikiãè¦ã¦ã。
- æ½è±¡(abstract)æå®ã§è¦ªã«ãªããæå®ã¯ã§ããªãã¹ãã¼ãã¨ãä½ãã。
- urlã¯{id:[0-9]{5}}ã¿ããã«æ£è¦è¡¨ç¾æå®ã§ãã。
- urlã¯^ããå§ããã¨çµ¶å¯¾æå®ã§æä¸ä½ããå§ãããã。
- ãã移åæã«stateæå®ããã¨ãã®^(親ã®ã¹ãã¼ã)ã¨åæåã§æå³ãéã£ã¦ãããã«ããæ°ããã。
ã«ã¼ãã®å©ç¨
ä»ã¾ã§è¨å®ããã«ã¼ããå©ç¨ããå ´å、ã¤ã¾ãã¢ã³ã«ã¼ã¿ã°(a)ãªãã移åããã¨ãã¯、ui-srefãã£ã¬ã¯ãã£ãã使ã。ãã¡ãã#/hogeã¿ããã«hrefã¨ãng-hrefã«æ¸ãã¦ãæ£ããåä½ãããã ãã©、
ããã ã¨html5Modeãåãæ¿ãããURLã®æ§é ãå¤ããæã«å ¨é¨æ¸ããªãããã¨ã«ãªã。
ui-srefã¯ã¹ãã¼ãã¨ãã©ã¡ã¼ã¿ã渡ãã¦ããã°、ãã¨ã®URLæ§é ã®å¤æ´ã¨ãhtml5Modeã¸ã®å¯¾å¿ãªããã¯åæã«ãã£ã¦ããã。
使ãæ¹ã¯ãããªæã。
<a href="#/emp/hoge/1234" .. → <a ui-sref=".hoge({id:empID})"...>ãããç¸å¯¾ãã¹ã¨çµ¶å¯¾ãã¹ããã£ã¦、ãã®ä¾ã ã¨ç¾å¨ã®stateç´ä¸ã®hogeã¨ããstateã«ç§»åãã。ããããé ã«ä»ãã¨ç¸å¯¾ãã¹ã§、ããããç¡ããã°çµ¶å¯¾ãã¹ã§、^ããå§ã¾ãã¨è¦ªã®ã¹ãã¼ãã¨ã、ãããªæã。詳ããã¯Wikiãåç §ã®ãã¨。
å¼æ°ã§æ¸¡ããªãã¸ã§ã¯ãã®ããããã£åã¯å½ç¶è¨å®ããã¨ãã«urlãåãåããã©ã¡ã¼ã¿åã¨ä¸è´ãã¦ããªãã¨ãªããªã。
ui-sref-activeã«ãã®ã¹ãã¼ããã¢ã¯ãã£ããªã¨ãã«ä»ãããã¯ã©ã¹ãæå®ããã¨、ä¸ã®ãµã³ãã«ã¿ããã«bootstrapã®activeãªãããç°¡åã«å©ç¨ã§ããã®ã§ä½ãã¨æ¥½。ng-classã¨éã£ã¦、æ®éã®classæå®ã¨ãå ±åããã®ã§ä¾¿å©。
ã¡ãªã¿ã«ã³ã¼ãä¸ãã移åããã¨ãã¯$state.go()ãå©ç¨ãã。
以ä¸、ãããªæã。