ãããžã§ã¯ãã§å€æ°ã®http-requestãåŠçãããšãã«ãç¬èªã®Angular.js webApiã¢ãžã¥ãŒã«ãéçºããããšããèŠæãçããŸããã
宿°ã䜿çšããŠãã¡ã€ã«ãäœæããã ãã§ãªããç¹å®ã®ã¢ãžã¥ãŒã«ãéçºããŠæ¢åã®æ©èœã®ãµããŒããç°¡çŽ åããããšãéèŠã§ããã æ¬¡ã«ãçŸåšã®ã¢ãžã¥ãŒã«ã³ã¢ã®æŽåæ§ãæãªãããšãªãããã®åŸã®æ¡åŒµã®å¯èœæ§ã«æ³šæããå¿
èŠããããŸããã

å°æ¥ã®webApiã¢ãžã¥ãŒã«ã解決ãã¹ãã¿ã¹ã¯ïŒ
- ãããžã§ã¯ãå
ã®httpãªã¯ãšã¹ãã®éè€ãé²ããŸãã
- ç¹å®ã®ã¡ãœãããç·šéããããããããã«ãæ¢åã®ã¯ãšãªãªã¹ããæ©èœã«ããŽãªã«ã°ã«ãŒãåããŸãã
- åçŽãªäŸåæ§æ³šå
¥ã䜿çšããŠãä»ã®Angular.jsãããžã§ã¯ãã«æ¥ç¶ããã¢ããªã±ãŒã·ã§ã³ã®å®å
šã«ç¬ç«ããæ©èœåäœã«ãªãããšã
- å€éšãœãŒã¹ãæäœããéã®åé¡ãåé¿ããããã«ãå
éšå®è£
ãã«ãã»ã«åããŸãã
ãã¢
ã¢ãžã¥ãŒã«ã®ãœãŒã¹ã³ãŒããè¡šç€ºïŒ github ã
ããã«ããããã®åãã€ã³ãã«ã€ããŠè©³ãã説æããŸãã
éè€ããhttpãªã¯ãšã¹ã
ããã¯ãã¢ããªã±ãŒã·ã§ã³ã®è€æ°ã®å ŽæïŒã³ã³ãããŒã©ãŒããµãŒãã¹ãå·¥å ŽïŒã§1ã€ã®èŠæ±ã䜿çšããããšã§ãã ã¡ãœããã10ã20ã®å Žåãåãªã¯ãšã¹ãã«å€æŽãå ããããšã¯å€§ããªåé¡ã«ã¯ãªããŸããã ãããã100ã200ããŸãã¯ãã以äžã®URLã®æ°ã«ãªããšããã®ãããªã³ãŒãã®ãµããŒãã¯ãŸããŸãå°é£ã«ãªããŸãã
äŸ1
ãŠãŒã¶ãŒã°ã«ãŒãã®ãªã¹ããååŸããã¡ãœããããããŸãã 察å¿ããããããããŠã³ã«è¡šç€ºããããšããŸãã ã°ã«ãŒããéžæããããšããã®ãŠãŒã¶ãŒã¯å¥ã®èŠæ±ã«ãã£ãŠããŒããããã°ã«ãŒãIDã転éãããŸãã ãŸããããŒãžã«ã¯ãäžéšã®ãŠãŒã¶ãŒããŒã¿ãèŠèŠåããããã®è¿œå æ©èœããããŸãã
å¥ã®ã³ã³ãããŒã©ãŒã«ã¯ãç¹å®ã®ã°ã«ãŒãã®ã·ã¹ãã ã®ãã¹ãŠã®ãŠãŒã¶ãŒã衚瀺ããå¿
èŠãããããŒãã«ããããŸãã ãã®ããŒãžã«ã¯ãåæãšãŠãŒã¶ãŒç®¡çã®ããã®éåžžã«å€ãã®ãªãã·ã§ã³ããããŸãã
å®éã«ã¯ãã¯ããã«é¡äŒŒããã¯ãšãªãååšããå¯èœæ§ããããŸãã
åé¡è§£æ±º
, http- , .. url'.
ãã®ã¢ãããŒãã«ããããããžã§ã¯ãã§å¿
èŠãªèŠæ±ãšãã®å€æŽãæ€çŽ¢ããéã®æéãç¯çŽãããŸãã
ç¹°ãè¿ããŸããããã®ãããªãã¡ã€ã«ã®æäœã¯ããµãŒããŒãžã®ãªã¯ãšã¹ããå°æ°ã®å Žåã«ã®ã¿æ©èœããŸãã 200ãè¶
ãã宿°ãæã€ãã¡ã€ã«ã®äŸ¿å©ãªãµããŒããæ³åããããšã¯å°é£ã§ãã
ã«ããŽãªå¥ã«ã¯ãšãªãã°ã«ãŒãåãã
ãã®ã¢ãããŒãã¯ãäžèšã®åé¡ã解決ããŸãã ç¬ç«ããã«ããŽãªã®æ±ºå®ãã©ã®çšåºŠæ£ç¢ºã«è¡ããããã¯ãéçºè
èªèº«ã決å®ããŸãã ç°¡åã«ããããã«ã api
ããã³ã³ãããŒã©ãŒã¡ãœããã®ååã«çŠç¹ãåœãŠãããšãã§ããŸãã
äžèšã®äŸã¯ããªã¯ãšã¹ãã«å
±éã®ã«ãŒã/api/group-manage/
ãããããšã瀺ããŠããŸãã groupManage.js
察å¿ããååã®ã«ããŽãªãäœæããŸãã
Angular.jsç°å¢ã§ã¯ããã®ãã¡ã€ã«ã¯constantãšããŠå®£èšããããã®åŸãã¡ã€ã³ã®webApiã¢ãžã¥ãŒã«æ©èœã«æ¥ç¶ãããŸãã
ãããžã§ã¯ãã«ã¯ããã®ãããªã°ã«ãŒããè€æ°ååšããå ŽåããããŸãã ããããã°ã«ãŒã管çã«é¢é£ããã¯ãšãªãæ¢ãå Žæã¯ééããªãããã£ãŠããŸãã
远å ããURLãçŽæ¥åŒã³åºããšãé
ããæ©ããåãã¿ã€ãã®äžé£ã®äŸåé¢ä¿ãã³ãŒãã«è¡šç€ºãããŸãã ãããã£ãŠãwebApiã®ã ã³ã¢ ãã§ããããæäœããããã®ãã¹ãŠã®æ¢åã®èŠæ±ã®ãªã¹ããæäŸããå
±éãããã¯ãäœæããå¿
èŠããããŸãã
æ©èœçã«ãã»ã«å
æãå°é£ãªã¿ã¹ã¯ã®1ã€ã¯ããã¹ãŠã®ãµãŒããŒãªã¯ãšã¹ããåŠçã§ããã«ãŒãã«ãéçºããããšã§ããããã®äžæ¹ã§ãå
éšå®è£
ãé瀺ããã ãã§ãªããç¹å®ã®Angular.jsã¢ããªã±ãŒã·ã§ã³çšã«webApiã¢ãžã¥ãŒã«ãç°¡åã«æ§æããæ©èœãæäŸããŸããã
ãªã¯ãšã¹ãã®äŸã¯æ¬¡ã®ãšããã§ãã
{ Url: '/api/acc/login', CustomOptions: false, Method: 'post', InvokeName: 'login' }
- customOptions-远å ã®ãªã¯ãšã¹ãèšå®ã䜿çšãããã©ããã éåžžãç¹å®ã®èŠæ±ã®ããããŒãã¿ã€ã ã¢ãŠãå€ãwithCredentialsãã©ã¡ãŒã¿ãŒãªã©ãããã«ç€ºãããšãã§ããŸãã
ãã®ã¢ãããŒãã«ãããå
±éã®ã¿ã€ãããšã«è€æ°ã®URLãã°ã«ãŒãåããã ãã§ãªããåã¡ãœãããããŒã¿ãã©ã®ããã«åŠçããããææ¡ã§ããŸãã
webApi/config/
ãã£ã¬ã¯ããªwebApi/config/
ãAPIèšå®ãwebApi/config/
ãã¡ã€ã«ãwebApi/config/
ãŸãã ãã¡ã€ã³URLãæå®ããã®ã¯ããã§ãã
äŸ2
ã»ãšãã©ãã¹ãŠã®ææ°ã®Angular.jsã¢ããªã±ãŒã·ã§ã³ã¯èªèšŒã·ã¹ãã ã§åäœããŸãã éåžžãããã¯ãŠãŒã¶ãŒããŒã¿ïŒãã°ã€ã³ããã¹ã¯ãŒãïŒããµãŒããŒã«éä¿¡ãããã¹ãã¡ãœããã§ãã
å¿çãæåãããšãã¡ã€ã³ã¢ããªã±ãŒã·ã§ã³ã«ãŒãã«éç¥ãéä¿¡ããããã®åŸããŠãŒã¶ãŒã¯æ©èœãåããããŒãžã«ãªãã€ã¬ã¯ããããŸãã
ã¡ãœãããåŒã³åºããŸãïŒ
webApi.login({ "Login": "user", "Password": "qwerty" }).success(function(response, status, headers, config){
ãããã£ãŠãç¹å¥ãªã¬ãã«ã®æœè±¡åã§äœæ¥ãããããã¢ããªã±ãŒã·ã§ã³ããžãã¯ã®æ§ç¯ããã»ã¹ã«éäžã§ããŸãã ç¹å®ã®åŒã³åºããäœãè¡ãããçè§£ã§ããããã«ãã¡ãœããã«é©åãªååãä»ããããšããå§ãããŸãã
ãããããgetã¡ãœããã§ç©ºã®é
åã䜿çšããããšã¯ä»ã®ãšããå®å
šã«æç¢ºã§ã¯ãããŸãããããã®åŸã誰ããããã«ã€ããŠåŸã§èª¬æãããŸãã
ã¯ãšãªãã³ãã¬ãŒã
å€ãã®å Žåãã¢ããªã±ãŒã·ã§ã³ã®éçºæã«ããµãŒããŒåŽã¯æ¬¡ã®ãªã¯ãšã¹ã圢åŒãã¯ã©ã€ã¢ã³ãã«æäŸããŸãã
- / API /管çè
/åé€/ãããã¡ã€ã«/ {id}
- / api / admin / update / profile / {id} /ãããã¯
ãã®ãããã¢ããªã±ãŒã·ã§ã³ã®é©åãªå Žæã«ãããµãŒããŒã«ãªã¯ãšã¹ããéä¿¡ããéã«ããã®ãããªURLã®äœæã§äžå¿
èŠãªæäœãè¡ããªãããã«ãåä¿¡ãããã©ã¡ãŒã¿ãŒã«åºã¥ããŠæ£ããã¢ãã¬ã¹ãèªåçã«çæããç¹å¥ãªã³ã³ããŒãã³ããéçºãããŸããã
çæããããªã¯ãšã¹ãïŒ /api/admin/update/profile/5/block
ïŒãã¡ãããã¡ã€ã³URLãïŒã
ãããŠãããè€éãªãªã¯ãšã¹ãããµãŒããŒã«éä¿¡ããå¿
èŠãããå ŽåïŒããšãã°ããããã¯æéãšã¿ã€ãïŒãæ®ãã®ãã©ã¡ãŒã¿ãŒããurlããªããžã§ã¯ãã®ãã£ãŒã«ããšããŠæå®ããã ãã§ãã
çæããããªã¯ãšã¹ãïŒ /api/admin/update/profile/5/block/week/2
ãããŠä»ããŠãŒã¶ãŒã¯ã·ã¹ãã ã«ãã£ãŠ2é±éãããã¯ãããŸãã
ãã¿ãŒã³åã¯ãgetãå«ããã¹ãŠã®ã¿ã€ãã®ã¯ãšãªã§æ©èœããŸãã ãã®æ¹æ³ã§ãã¹ãŠã®ãªã¯ãšã¹ããäœæããããšããå§ãããŸããæéãç¯çŽããäžå¿
èŠãªæäœã§å
éšã³ãŒããè©°ãŸãããªãã§ãã ããã
ãªã¯ãšã¹ãæ¬æã®ããŒã¿ã転éãã
ãã³ãã¬ãŒãURLã«å ããŠãµãŒããŒã«ä»ã®ããŒã¿ïŒããšãã°ããã¹ããªã¯ãšã¹ãïŒãéä¿¡ããå Žåã¯ã次ã®ããã«è»¢éããå¿
èŠãããããšã«æ³šæããŠãã ããã
webApi.createPost({ "data": { "title": "Test post", "category": "sport", "message": "Content..." } });
åœç¶ãURLãã³ãã¬ãŒããšããŒã¿ãå«ããªããžã§ã¯ãã®åãæž¡ãã®äž¡æ¹ãåæã«äœ¿çšã§ããŸãã åŸè
ã¯ããªã¯ãšã¹ãæ¬æã§ãµãŒããŒã«éä¿¡ãããŸãã
GETã¡ãœããã䜿çšãã
ããã§ã¯ããªã¯ãšã¹ãæ¬äœã§ããŒã¿ã¯éä¿¡ãããŸããããgetãªã¯ãšã¹ãã¯æ¬¡ã®ããã«åœ¢æã§ããããšã誰ããç¥ã£ãŠããŸãã
api/admin/news/10?category=sport&period=week
ãŸãã¯ïŒ
api/admin/manage/get-statistic/5/2016
ãŸãã¯ïŒ
api/admin/manage/get-all
ã
åçæãªãã·ã§ã³ãæ€èšããŠãã ããã
ãªã¯ãšã¹ãã®ååŸäŸ äžèšã®2çªç®ã®ã¿ã€ãã®ã¯ãšãªã¯ãã§ã«åŠçããŸããã
æåã®ã±ãŒã¹ã§ã¯ããµãŒããŒã«ãªã¯ãšã¹ããéä¿¡ããå¿
èŠãããå Žåãåžžã«ç©ºã®ã³ã¬ã¯ã·ã§ã³ãæž¡ããŸãã
ã±ãŒã¹ïŒ3ã®å Žåã beforeãã£ãŒã«ãã¯ã ãïŒãã®åã«ããããã€ãã®ãã©ã¡ãŒã¿ãŒãå®çŸ©ããŸã ãŸãã afterãã£ãŒã«ãã¯ããŒãšå€ã®ã»ããã§ãã åœç¶ãå Žåã«ãã£ãŠã¯ã空ã®ã³ã¬ã¯ã·ã§ã³ã®åã«æ®ãããšãã§ããŸã[]ã
èšå®ã®CustomOptionsãã©ã¡ãŒã¿ãŒ
URLãã³ãã¬ãŒããªãã§ãªã¯ãšã¹ããååŸïŒ
webApi.getNewsById([10, {"headers": {"Content-Type": "text/plain"} } ]);
ãã®ä»ã®ãã¹ãŠã®å ŽåïŒURLãã³ãã¬ãŒãã䜿çšããgetèŠæ±ãå«ãïŒïŒ
webApi.login({ options: {"timeout": 100, {"headers": {"Content-Type": "text/plain"} } });
æ°ãããããžã§ã¯ãã§webApiãèšå®ãã
ã¢ãžã¥ãŒã«ã®æ§é ã¯æ¬¡ã®ãšããã§ãã
- module.jsãã¡ã€ã«-ã¢ãžã¥ãŒã«èªäœã®å®£èšã
- ãã£ã¬ã¯ããªmain /-webApiã®ã³ã¢ãå«ãŸãã倿ŽãããŸããã
- ã«ããŽãªãã£ã¬ã¯ããª-ãªã¯ãšã¹ãã°ã«ãŒãã1ã€ã®ã°ã«ãŒã-1ã€ã®* .jsãã¡ã€ã«ã
- Categories-handlerãã£ã¬ã¯ããª-webApiã¢ãžã¥ãŒã«ã®ãã¹ãŠã®ãªã¯ãšã¹ãã®ãã¬ãŒã
æåŸã®2ã€ã®ãã£ã¬ã¯ããªã§äœæ¥ããå¿
èŠããããŸãã
äŸ3
ãã倧åŠã§æžç±äŒèšã·ã¹ãã ãéçºãããŠãããšããŸãããã èŠæ±ã次ã®ã°ã«ãŒãã«åå²ããå¯èœæ§ãé«ãïŒ
- account.js-èªèšŒãèªèšŒè§£é€ããã¹ã¯ãŒãå埩ãªã©ã®ãªã¯ãšã¹ãã
- bookManage.js-ããã¯ã䜿çšããCRUDæäœã®ãªã¯ãšã¹ãã
- studentManage.js-åŠç管çã
- adminManage.js-ã¢ããªã±ãŒã·ã§ã³ã®ç®¡çéšåã管çããããã®äžé£ã®ãªã¯ãšã¹ãã
ãã¡ããããã®ãªã¹ãã¯æ¡åŒµã§ããŸãã
- , .
æ°ããã«ããŽãªã®ãªã¯ãšã¹ããçºè¡šããŸã (function(){ angular .module("_webApi_") .constant("cat.account", { "DATA": [ { Url: '/api/acc/login', CustomOptions: false, Method: 'post', InvokeName: 'login' },
èŠæ±ãã¡ã€ã«ãäœæãããŸããã æ¬¡ã«ããããwebApiã³ã¢ã«é¢é£ä»ããå¿
èŠããããŸãã
ãªã¯ãšã¹ãã®ã°ã«ãŒããç¹å¥ãªãã³ãã©ãŒã«è¿œå ããŸã (function(){ angular .module("_webApi_") .service("webApi.requests", webApiRequests); function webApiRequests(catAccount){
ãã®å Žåããã¹ãŠã®å®æ°ã¯ã cat.constants name ããä»ããŠæžã蟌ãŸããã catNameConstants ã ãã¬ãŒã«æ¥ç¶ãããŸãã
ãããã£ãŠãwebApiã¯è¿œå ã®ããŒã ã¹ããŒã¹ã catã ãã䜿çšãããããã¢ããªã±ãŒã·ã§ã³å
ã®ä»ã®å®æ°ãšç«¶åããããšã¯ãããŸããã
次ã«ã説æãããã³ãã¬ãŒãã«åŸã£ãŠã¡ãœãããåŒã³åºããŸãã
webApi.login( //- )
ãªããžããªãæäœãã
webApiã®æ©èœãã¢ããªã±ãŒã·ã§ã³ã®å
éšã³ãŒãã«å
¬éããªãããã«ã远å ã®ããªããžããªãæœè±¡åã䜿çšããããšã決å®ãããŸããã
, , http-. -webApi , .
ç¹å®ã®ã FoodController ããšå¯Ÿå¿ããfoodManageãªã¯ãšã¹ãã°ã«ãŒãããããšããŸãã ãã®ã«ããŽãªã®åã¡ãœããã¯ããµãŒããŒäžã®ããŒã¿ç®¡çã®ç¹å®ã®å®è£
ãæ
åœããŸãã
ãªããžããªã宣èšããŸãïŒ
(function() { "use strict"; angular .module("app.repositories") .factory("repository.food", foodRepository); function foodRepository(webApi){ return { get: getById getAll: getAll, remove: removeById, removeAll: removeAll }
ãããã£ãŠãwebApiã®æ©èœãå
¬éããã«ãã³ã³ãããŒã©ãŒããã®ããŒã¿ã管çããããã®æœè±¡åãã¡ã¯ããªãŒãäœæããŸããã ãããŠããã€ã§ãçŸåšã®å®è£
ãä»ã®ãã®ã«çœ®ãæããããšãã§ããŸãã
ããšãã°ãã¢ã€ãã ã«é¢ããæ
å ±ãåä¿¡ããå Žåããéèãããæç©ãããçä¹³ããªã©ã®ã¿ã€ããæå®ããå¿
èŠããããŸãã ç¹å¥ãªã¬ãã«ã®æœè±¡åãååšãããããã¡ãœããã«æ¬¡ã®å€æŽãå ããã ãã§ååã§ãã
function getById(id, category) { return webApi.getFoodItemById({ "url": { "id": id, "category": category } }); }
ãªããžããªãã¢ããªã±ãŒã·ã§ã³ã«æ¥ç¶ãã
åè¿°ã®ããã«ããªããžããªã¯ãwebApiã¢ãžã¥ãŒã«ãžã®å
éšåŒã³åºããéããŠããŒã¿ã管çããããã®ãããªãã¯ã¡ãœãããæäŸãããšã³ãã£ãã£ã§ãã
ãããã£ãŠãç¹å®ã®ã¡ãœãããåŒã³åºããŠé©åãªãã©ã¡ãŒã¿ãŒãæž¡ãã ãã§ååã§ãã
(function() { "use strict"; angular .module("app") .controller("FoodController", FoodController); function FoodController(foodRepository){ var vm = this;
ããŒã¿èŠèŠåã®ããã®HTMLã¹ããããïŒ
<div ng-controller="FoodController as fc"> <ul> <li ng-repeat="food in fc.foodItems track by food.Id"> Title: <span class="item-title"> {{food.title}} </span> Cost: <span class="item-cost"> {{food.cost}} </span> </li> </ul> </div>
ãããã£ãŠããªããžããªã¯ããŒã¿ãè¿ããAngular.jsã¯ããããèªåçã«ãã¥ãŒã«çœ®ãæããŸãã ãŸããäžå€®ã®ã³ã³ãããŒã©ãŒãšèª¿æŽããã«ããã«ããã¢ã€ãã ãåé€ããã远å ãããããŠãwebApiã«çŽæ¥ã¢ã¯ã»ã¹ããããšã¯ã§ããŸããã
, .
ãããã«
Angular.jsãæäœããããã®ãæ§æå¯èœã§æ¡åŒµå¯èœãªwebApiã¢ãžã¥ãŒã«ãäœæãããªãã·ã§ã³ãæ€èšããŸããã
ãã®ã¢ãããŒãã¯ãã³ãŒãå
ã®ããžãã¯ã®éè€ãåãé€ããå¿
èŠãªã¡ãœããã®ç·šéã«ãããæéãççž®ããè€éãªã¯ãšãªã§ã®äœæ¥ã容æã«ããã®ã«åœ¹ç«ã¡ãŸãã