ã¾ããã
æ¬ç¨¿ã¯AngularJS Startup AdventCalendar2013ã®21æ¥ç®ã§ã。20æ¥ç®:AngularJSãTypeScriptã§æ¸ãã¨ãã®ãããã - Qiita [ãã¼ã¿]
scopeã«ã¤ãã¦
scopeã¯AngularJSã§ãã¥ã¼å´ã«å¤ã渡ãã¨ãã«å©ç¨ãããµã¼ãã¹。ãã¶ãç¥ã£ã¦ãã¨æã。ããããã¥ã¼ã¨ã³ã³ããã¼ã©ã¼ããã¼ã¿ãããã¨ããã。
ã§、ä»åã¯ã¡ãã£ã¨AngularJSããããå§ããã¨å ¬å¼ããã¥ã¡ã³ããªãããã¡ãã¡ã«åºã¦ãã、æ°ããscopeãä½ãããã£ã¦ããé¨åã«ã¤ãã¦æ¸ã。
ãã£ã¬ã¯ãã£ããªããã®APIãèªãã§ãã¨åºã¦ãã。ãã®ãã£ã¬ã¯ãã£ãã¯æ°ããscopeãä½ãã¾ãã£ã¦、ããã£ã¦ãªããªã®ã。
scopeã®çæã¨ç¶æ¿
scopeã¯ä¸çªä¸ä½ã«ä½ç½®ããrootScopeã®ä¸ã«é層åããã¦ä½ããã¦ãã。scopeã¯JavaScriptã®ã¬ãã·ã«ã«ã¹ã³ã¼ãã¿ããã«ãããã¯ãæã¡、親åé¢ä¿ãæã¤。
ãªã®ã ãã©、å°ãã ãjavaScriptã®ã¹ã³ã¼ãã¨ã¯éãé¨åããã。ãããã¡ãã£ã¨ã ããããã«ãã。
ä¸è¬çã«ãã£ã¬ã¯ãã£ããä½ãã¨ãã«scopeãä½ããã¨ãå¤ãã®ã§、ãããä¾ã«åã£ã¦èª¬æãã。
ãã£ã¬ã¯ãã£ãã®ä½ææã«scopeã®çæã«ã¯、false(ä½ããªã:ããã©ã«ã)、true(ä½ã)、ãªãã¸ã§ã¯ã(親ãç¶æ¿ããä½ã)ã£ã¦ã®ããã。
ä¸å¿æ¯è¼å¯¾è±¡ã¨ãã¦falseã®ä½ããªããã¤ããfiddleã«ä¾ãä½ã£ã。
AngularJS Scope-1 - JSFiddle
ããã¯è¦ãã¾ãã¾ã§ãã£ã¬ã¯ãã£ãå ã§ãããªã親ã¹ã³ã¼ãã®ããããã£ãèªãã§ããã©、åé¡ãªã表示ããã¦ãããæ´æ°ãåºæ¥ã。念ã®ããã«æ¸ãã¦ããã¨、ããã¯ãµã³ãã«ãªã®ã§ãããããã¨ããã¦ãããã©、æ®éã«ãããªãã¨ãããã¨ã¢ã¸ã¥ã¼ã«éã®çµå度ãä¸ããããã¦æçµçã«åããªãããã°ã©ã ãä½ããã¨ã«ãªãã®ã§ãã£ã¦ã¯ãããªã。
ãã¡çµ¶å¯¾。
æ®éã«ããå ´åã¯linkã®ç¬¬ä¸å¼æ°(attrs)ããã¿ã°ã«è¨å®ãããå±æ§ã®ä¸èº«ãèªã¿ã¨ã£ã¦scope.$watchã§åãåã£ãããã。
ãªãã§ããæ¸ãã¦ãªãã®ãã¨ããã¨ã³ã¼ããçããããã£ã¦ãã¨ã¨、ãã®å¾ã®ãµã³ãã«ã®æå³ãåããã¥ãããªããã。
ã¨ããããã§、trueãè¨å®ããå ´å。
AngularJS Scope-2 - JSFiddle
trueã¨falseãå¤ãã£ãã ãã ãã©、å+ãæ¼ãã¨è¦ª+ã¯å¤æ´ããã、以å¾ã¯ã¾ã£ããç¬ç«ãã¦ã«ã¦ã³ããããããã«ãªã(ãªã®ã§å ã«è¦ª+ããæ¼ãã¦ãã ãã)。ãããAngularJSã®scopeãJavaScriptã®ã¹ã³ã¼ãã¨éãé¨åã§、ã¤ã¾ã親ãç¶æ¿ãã¦åã¹ã³ã¼ããä½ã£ãå ´åã¯、親ã®å¤ã¯åç §å¯è½ã ãã©ä¸æ¸ããããã¨ã¯ã§ããªãã¨ãããã¨。
ä¸æ¸ããããã¨ããã¨å¤æ°åãªã©ã¯ãã®ã¾ã¾ã«、å¥ã®å¤ã¨ãã¦ä½æããã¦ãã¾ã。
ãããç¥ããªãã§å± ãã¨å ¨ãæå³ä¸æãªæåã«è¦ããã¨ãããã。
ãã¨ãã°ng-includeãªã©ã§ããããªé¢¨ã«scopeã¯ä½æããã。ãã®ãã、ãã¨ãã°è¦ªã®scopeã®å¤ããã®ã¾ã¾å©ç¨ãã¦、ãã¤ng-includeå é¨ã§ã¡ããã£ã¨æ°å¤ãå¤ãããããªãã®ãæ¸ãã¦ãã¾ãã¨、親ã®æ¹ã§å¤ãæä½ãã¦ãããã¡ã¯è¯ããã©、ng-include以ä¸ã§æä½ããã¨æ¥ã«è¦ªããå¤ãèªããªããªã©ã¨ãããã¨ãèµ·ããããã。
ã§、æå¾ãscopeã«objectãæå®ããå ´å。
AngularJS Scope-3 - JSFiddle
ããã¯è¦ªãç¶æ¿ããªãã®ã§、親ã®å¤ã¯å ¨ãåç §ãããã¨ãåºæ¥ãªã。
ã¤ã¾ãåãã¾ãã。ã使ãã®PCã¯æ£å¸¸ã§ã。
ãã ãã®objectã«è¦ªããç¶æ¿ããããã®ãè¨å®ãããã¨ãã§ãã。ããã§ã¯ãã¹ã¦ã¯è©³ããæ¸ããªããã©、親ã®scopeã®å¤æ°ãå¤æ´å¯è½ãªç¶æ ã§åãåããã¨ã¨ã、åã®DOMå ã«ã®ã¿å ¥ãããã¨ã¨ã、親ã®contextã§å®è¡ãããã¨ã(ng-click="hoge()"ã¿ãããªãã¤ã®ãã¨)、ãã§ãã。
å¤ãåãåãå ´åã¯ããããã£åãåscopeã§ããããã£åã«ãããååã«ãã¦、ãã®å¤ã"=èªåã®DOMã®å±æ§å"ã«ãã。ã¤ã¾ã<div hoge="***">ã¿ãããªå ´å、scope:{myValue:"=hoge"}ã¨ãããããªãã¨。
ã¡ãªã¿ã«åscopeå ã§å±æ§åã¨åãååã使ãã¨ãã¯å±æ§åã¯çç¥å¯è½。
{hoge:"="}ã£ã¦ãªæã。
ãã¡ãããµã³ãã«。
AngularJS Scope-4 - JSFiddle
ã¾ã¨ã
å
·ä½çã«ã©ãããã¨ãã«ä½¿ããã ã£ã¦è¨ãä¾ãä½ã£ã¦ããããã£ããã©、æéããªãã£ã。å®éã«ããªããªæ¸ãã¦ãã¨çµ¶å¯¾ã«åãã£ã¦ãªãã¨ãã¡ãªå±é¢ããã£ãã¯ããªãã ãã©、ãªããªãã¡ããã¨åç¾ããã³ã¼ããæ¸ãã®ã¯ããããã。
ã§ãjQueryæ¡å¼µã¨ãããã£ã¬ã¯ãã£ãã«æ¾ãè¾¼ãã§AngularJS対å¿ã«ãã¦ããã¨ã、è¤æ°ã®ãã£ã¬ã¯ãã£ããã¿ã°ã«ä»ãã¾ãã£ãããããããã¨、ãªããå¤ãä¸æãå¤ãããã¨ãæããã¨ããã£ã。ã§ããã®ããããç解ãã¦ããã¯åé¡ãªããªã£ã。
scopeä½ãã¨ãã«å®éã©ã使ãã°è¯ããã£ã¦ããã®ã§è¨ãã¨、æ®éã«ä½¿ãã ããªããªãã¸ã§ã¯ãã渡ãã¦å¿
è¦ãªããããã£ã ãå
±æããã®ããããã。å®å
¨ã ããã¹ãèµ·ãããªãã®ã§è¯ãã¨æã。
ä½è«
$watchã§å¤ãåãåãã¨ã、åãåã£ãå¤ããªãã¸ã§ã¯ãã¨ãé
åã¨ãã ã¨åç
§æ¸¡ãããã¦ããã®ã§scope:trueã«è¨å®ãã¦ãã£ã¦ããã®ãªãã¸ã§ã¯ãã®ããããã£ã¸ã®å¤æ´ã¨ãã¯é常éãè¡ããã¦è¦ªscopeå´ã®å¤ã«å½±é¿ãã。
ã¾ãã§ãé¢æ°ã®å¼æ°ã¨åã。