ç§ã¯æåºããŠããŸã
[X]æ©èœãªã¯ãšã¹ã
ããã€ãã®äžè¬çãªããžãã¹ããžãã¯ãæäŸããã³ã³ããŒãã³ãããããŸãã ãŸãèšã£ãŠã¿ãã°ïŒ
æ¡ä»¶ã«å¿ããŠãååã®çš®é¡ããŠãŒã¶ãŒéšéãªã©ã«åºæã®ã¬ã€ã¢ãŠãïŒãã³ãã¬ãŒãïŒã衚瀺ããããšæããŸãã
çŸåšããããè¡ãããã®ãã³ãã¬ãŒãããã®å Žã§ããŒãããããšã¯ã§ããŸããã
ãããè¡ãããã®å¯èœãªæ¹æ³ã«ã€ããŠããããšã¹ã¿ãã¯ãªãŒããŒãããŒã«é¢ãããã¹ãŠã®åé¡ãèªã¿ãŸããã
æãå®çšçãªæ¹æ³ã¯ngTemplateLayoutã§ãã ããããå®éã«ã¯ãæ°åã®ç°ãªãã¬ã€ã¢ãŠãã¿ã€ããããå Žåããã³ãã¬ãŒããã¡ã€ã«ãçç Žãããä¿å®ã§ããªããªããŸãã
AngularããŒã ãæãæšå¥šããæ¹æ³ã§ããdynamiccomponentloaderã䜿çšãããšãã³ã³ããŒãã³ããšã¢ãžã¥ãŒã«ã®äœææ©èœãã«ãã»ã«åãããŠããå Žåã§ããã³ã³ããŒãã³ããåçã«çæããããã®ã³ãŒãã®ãªãŒããŒããããå€§å¹ ã«å¢å ããŸãã ããã«ãåçã«äœæãããngModuleã§ã¯ãã³ã³ããŒãã³ããæ©èœãããããã«ãã¹ãŠã®ã€ã³ããŒãããšã¯ã¹ããŒãããããã€ããŒãªã©ãæäŸããå¿ èŠããããããå®éã®æ±çšãœãªã¥ãŒã·ã§ã³ã¯èš±å¯ãããŸããã ãããã£ãŠããžã§ããªãã¯ã³ã³ããŒãã³ããã«ããŒã§å€§ããªãªãŒããŒããããçºçãããããªãå Žåã¯ããã©ãŒã ã¿ã€ãã®ãã¿ã€ããããšã«ãžã§ããªãã¯ã³ã³ããŒãã³ããã«ããŒãå®è£ ããå¿ èŠããããŸãã ããã¯å®çšçã§ã¯ãªãã次ã®è§åºŠãªãªãŒã¹åŸã«ãã¹ãŠãåã³ãŒãã£ã³ã°ããå±éºæ§ãé«ããŸã
äºæ³ãããè¡å
ã³ã³ããŒãã³ãã®ãã³ãã¬ãŒããåçã«ããŒãããæ¹æ³ãæäŸããŸãã Angular1ã§å©çšå¯èœã§ãããã
ãã®åé¡ã«ã€ããŠç¬æçã«ãªããªãã§ãã ãããAngular2ã§å®éã®èŠä»¶ããµããŒãããããšãæ€èšããŠãã ããã
ããããšã
2ã€ã®ã³ã³ããŒãã³ããçšæããŠãããå¿
èŠãªç¶æ³ã«å¯Ÿå¿ããã³ã³ããŒãã³ããããŒãããŠã¿ãŸãããã äŸïŒ AdminDisplayComponent
ããã³NotAdminDisplayComponent
ïŒ
ãã³ãã¬ãŒããåçã«ããããšã¯ã§ããŸããããã³ãã¬ãŒãã¯ã³ã³ããŒãã³ãã«é¢é£ä»ããå¿
èŠããããŸã
ãã³ãã¬ãŒãã¯çŸåšåçã§ã¯ãªãããšãç§ã¯ç¥ã£ãŠããŸãããããŠããã¯ç§ãæŠèª¬ããããã«èŠçã§ãã åãããžãã¯ã§2ã€ããã以äžããŸãã¯æ°çŸã®ã³ã³ããŒãã³ããå®è£
ããããããŸããã
ã ããç§ã¯ãã®æ©èœããªã¯ãšã¹ãããŸãïŒ
@KarlXOLäžå¯èœãšã¯ãAOTãå£ããã«åçã«ããããšã¯äžå¯èœã ãšããããšã§ãã
åé¡ã®è§£æ±ºçãšããŠãå
±éã®ã³ãŒããå
±æãããå Žåã¯ããµãŒãã¹ã䜿çšããŠã¿ãŸãããïŒ ãŸãã¯ããµãŒãã¹ãã³ã³ããŒãã³ããäœæãããšã¯æããªãå Žåã¯ãã³ã³ããŒãã³ãããç¶æ¿ããŸã
@DzmitryShylovich ïŒãã®æ©èœãæäŸããããªãããšã¯ããã£ãŠããŸãã ããããç§ããããè¡ãããã®ä»ã®ãã¹ãŠã®æ¹æ³ã説æããããšããã®ã§ãæŸèæã§ãããå®çšçã§ã¯ãããŸããã
è§åºŠæ©èœã䜿çšããŠãããè¡ãå ŽåãAOTæ©èœãå£ãã³ã³ãã€ã©ã䜿çšããå¿
èŠããããŸãã å³ïŒ ã ããäœã
ç¬æçã«ãªããªãã§ãããªãã®ã¢ãããŒããèãçŽããŠãã ããã ç§/ç§ãã¡ã¯ãœãªã¥ãŒã·ã§ã³ãæäŸããŠããããããè¡ãäžã§ç§ãã¡ããµããŒããããã©ãããã©ãŒã ãå¿
èŠã§ãã
@Toxicable ïŒCRUDæ©èœãªã©ããµãŒãã¹ã«ã«ãã»ã«åããæ¹æ³ã®äŸãããå Žåã¯ããã²ã芧ãã ããã ãããå¯èœã§ãããšããŠããäŸãã°è£œåããšã«ã³ã³ããŒãã³ããå®è£ ããå¿ èŠããããŸãã
@KarlXOLCRUDæ©èœããµãŒãã¹ãšããŠå®è£ ã§ããªãã£ãçç±ãããããŸããã ããããããã¯ãããè¡ãããã®æè¯ã®æ¹æ³ã§ãããäžè¬çãªãã¿ãŒã³ã§ãã
ããªããAOTããŸã£ããæ°ã«ãããå®è¡æã«ã³ã³ãã€ã©ã¢ãžã¥ãŒã«ãããŒããããç¶æ ã§JITã¢ãŒãã§ãã¹ãŠãå®è¡ãããããšãæ£ããç解ããŠããå Žåã ãã®åŸãããªãã¯ä»ãããè¡ãããšãã§ããŸãã https://www.ag-grid.com/ag-grid-angular-aot-dynamic-componentsãhttps://eyalvardi.wordpress.com/2016/09/04/injecting-components-inã§eaxmpleãæ¢ããŠãã ãã-ã©ã³ã¿ã€ã ãŸãã¯http://blog.assaf.co/angular-2-harmony-aot-compilation-with-lazy-jit-2ã
@ mlc-mlapisïŒãã¡ãããå®éã®ããŒã¿æäœïŒæ°èŠãæŽæ°ãªã©ïŒã¯ãµãŒãã¹å ã«ãããŸãã ãã ããã³ã³ããŒãã³ãã®äžéšã§ãããŠãŒã¶ãŒã®æäœïŒã¯ãªãã¯ã...ïŒã«ãã£ãŠããªã¬ãŒãããŸãã
ããªããåç §ããŠãããªã³ã¯ã¯ãè€æ°ã®ã³ã³ããŒãã³ããã©ã®ããã«æ±ããã瀺ããŠããŸãã ãããŠããããã€ã³ãã§ããç§ã¯èµ€ãç·ãéã®è€æ°ã®ã³ã³ããŒãã³ããæã¡ãããããŸããã å¿ èŠãªã³ã³ããŒãã³ãã¯1ã€ã ãã§ããã³ãã¬ãŒã/ã¬ã€ã¢ãŠããå€æŽããŸãã æ©èœãªã¯ãšã¹ãã§çç±ã説æããŸãã
@KarlXOLãããããã®äŸã¯ãŸãã«ããªããæããã®ã§ããã¯ããŸãã¯ãããïŒããªãã®èŠç¹ãç解ããããã«ïŒïŒ https://eyalvardi.wordpress.com/2016/09/04/injecting-components-in-runtime
ããã§ããã¯ãªãã¯ã¯ãããŸãããã³ã³ããŒãã³ããDIïŒã·ã³ã°ã«ãã³ã§ããå¿ èŠããããŸãïŒãä»ããŠãµãŒãã¹ãæ³šå ¥ããå¿ èŠãªã€ã³ã¿ãŒãã§ã€ã¹ãæäŸããããããªããããã«èšåããã®ãç解ã§ããŸããã
ãã¡ãããå®éã®ããŒã¿æäœïŒæ°èŠãæŽæ°ãªã©ïŒã¯ãµãŒãã¹å ã«ãããŸãã ãã ããã³ã³ããŒãã³ãã®äžéšã§ãããŠãŒã¶ãŒã®æäœïŒã¯ãªãã¯ã...ïŒã«ãã£ãŠããªã¬ãŒãããŸãã
@ mlc-mlapisããã¯ããªã¯ãšã¹ãã§åç
§ããå¯èœãªãœãªã¥ãŒã·ã§ã³ã®1ã€ã§ãïŒãdynamiccomponentloaderãïŒã ãã®ã¢ãããŒãã®æ¬ ç¹ã¯
1ïŒåçã³ã³ãã³ããæã€ã³ã³ããŒãã³ãããšã«ããã«å€ãã®ã³ãŒãè¡ãå¿
èŠã§ã
2ïŒåçã¢ãžã¥ãŒã«ã®äœæã¯ããããæ©èœãããããã«é©å¿ïŒã€ã³ããŒãïŒããå¿
èŠããããŸãïŒãã£ã¬ã¯ãã£ãïŒ
çµæãšããŠã倧ããªãªãŒããŒãããã®ããåçã¢ãžã¥ãŒã«ãããããè€æ°ã®åçã¢ãžã¥ãŒã«ãã«ããŒãå®è£
ããŸã
èŠçŽãããšããã®ãœãªã¥ãŒã·ã§ã³ã¯ãAngularãé²åããã«ã€ããŠãidãé©å¿ãããå¿
èŠããããééããããéåžžã«äœã¬ãã«ã§ããªã¹ã¯ãé«ããã®ã§ã...ãããŠãAngular1ããã®èŠä»¶ã«æäŸããç¡é§ã®ãªãè¿
éãªã¢ãããŒããšã¯ç«¶åããŸããã
ç°¡åãªäŸã瀺ãããã«ãç°ãªãéšéã«å±ãããŠãŒã¶ãŒã«ç°ãªããã¿ã€ãã«ããæ瀺ããããšããŸãã
ãã®ããããã³ãã¬ãŒãããã®å Žã§å€æŽ/ããŒãããæ©èœããªã¯ãšã¹ãããŸãã ãã¬ãŒã ã¯ãŒã¯ã¯ãããžãã¹ã¢ããªã±ãŒã·ã§ã³ã§ã¯ãªãããã®äœã¬ãã«ã®ãã®ãåŠçããå¿ èŠããããŸãã
ããã§ãããªããäœãæå³ããã®ããæ確ã«ãªããŸããã ãã®ãããªåçŽåãšéåžžã«é«ãã¬ãã«ã®æ©èœæ§ãæ³åããããšãã§ããŸãã ãŸããããã¯JITã¢ãŒãã®ã¿ã«å³å¯ã«å¶éãããããšãèšãå¿ èŠããããŸãã
å®éãAngularã«ã¯JITã¢ãŒããšAOTã¢ãŒãã®éã§æ©èœãåºå¥ããattribute
ã¯ãããŸããã stable
ã experimental
ã depreciated
ãŸãã
ãã1ã€ã®è³ªåã¯ãã¿ã€ã ã©ã€ã³ã«ããããã®ãããªæ©èœã®åªå é äœãšAngularã³ã¢ããŒã ã®èŠ³ç¹ã§ãã
@ mlc-mlapisãã£ãŒãããã¯ãããããšãããããŸãã ã¡ãã»ãŒãžãäŒããããšãã§ããŠããããã§ã:-)
ããã«ããä»ã®å€ãã®åé¡ãstackoverflowããããã®æ©èœã¯å®éã®ããžãã¹ã¢ããªã±ãŒã·ã§ã³ã§éåžžã«äžè¬çãªèŠä»¶ã§ããããã倧ããªããŒãºãããããšãç¥ã£ãŠããŸãã éå»ãããŠå°æ¥ããã«ãã£ãšã
@DzmitryShylovich ng-descendantã®ææ¡ããã¯ããããŸãããããããç§ã®èŠæ±ã®è§£æ±ºçã«ãªãã§ãããã
倧èŠæš¡ãªãšã³ã¿ãŒãã©ã€ãºã¢ããªã±ãŒã·ã§ã³ã®ã·ããªãªã§ããæè»ã§äœ¿ããããããããã«ãè§åºŠã®ããã¢ãŒããã¯ãã£ã¢ãããŒããåèããããšããå§ãããŸãã Angularãã¬ãŒã ã¯ãŒã¯ãšããŒã ãã³ã³ããŒãã³ãã®ãã³ãã¬ãŒããåçã«ããŒãããããšã¯äžå¯èœãªäœ¿åœã§ã¯ãããŸããã
@KarlXOL Enterpriseã¢ããªã±ãŒã·ã§ã³ã®ã·ããªãªããAOTãååšããçç±ã§ãã ðåçãã³ãã¬ãŒãã¯åãªãã·ã§ãŒãã«ããã§ããã cheaper
ãœãªã¥ãŒã·ã§ã³ã§ãã ãããã£ãŠãããããéçŸå®çãªåèã«ã€ããŠã®æšå¥šäºé
ã§ãã
@ mlc-mlapisç§ã¯ãã®ãããªçããæåŸ ããŠããŸããã ãªãAngularããŒã ãäŒæ¥ã«å¿ èŠãªãã®ãæäŸããŠããªãã®ãçåã«æã£ãŠããŸãã ãŸãããšã³ã¿ãŒãã©ã€ãºç°å¢ã§ã¯ãã¢ããªã±ãŒã·ã§ã³ãããé«éãã€å®äŸ¡ã«ããããšãéèŠã§ãã ããããããã¯Angular2ã§ãµããŒãããŠãããã®ã§ã¯ãªãããšã確èªããŸããã
@KarlXOL奜å¥å¿ãããGoogleãã°ããŒãã«ã¢ããªã±ãŒã·ã§ã³ãéçºããæ¹æ³ã«ã€ããŠäœãæ å ±ã¯ãããŸããïŒ
@ mlc-mlapisããããªãã Angular1ãŸãã¯Angular2ã§ããïŒ
@KarlXOLäŒæ¥ãå¿
èŠãšããŠããã®ã¯ããã ãã§ã¯ãªãã®ã§ãããããããšã ãããšãã£ãŠã誰ããå¿
èŠãšããŠããããã§ã¯ãããŸããã 圌ããæè¿è¡ã£ããã¹ãŠã®ããšã¯ãã¢ããªã±ãŒã·ã§ã³ãããéããããç°¡åã«äœæã§ããããã«ããããšã§ããv2-> v4ããã®ãã³ãã«ã®åæžãèŠãŠãã ããã
ç®æšãã©ã®ããã«éæããããšããŠããã®ããåèããããšããå§ãããŸããAngularJSã§æ©èœããæ¹æ³ããAngularã§æ©èœããå Žåã«åžžã«æè¯ã®ã¢ãããŒãã§ãããšã¯éããŸããã
cc @robwormald
@KarlXOLããããç§ã¯ã€ã³ã¿ãŒãããäžã®made-in
Googleã®å€§éšåãæå³ããŸããã èŠãŠãã ããïŒ https ïŒ
@KarlXOLã¯ãç§ãäœæããå°ããªäŸã§ãhttps://plnkr.co/edit/kz2XKSKWSWZhPoncDQhG?p=preview
ããã§è¡ãã®ã¯ãUI /æ§æãæäŸããŠãããã¡ãœããã«ããã¯ããŠããã¯ãšã³ãããããããããšã ãã§ãã
@Toxicableããªãã®ãã©ã³
@Toxicableãã®éãã§ãã ç§ã®æçš¿ã¯ãµãŒãã¹ã«é¢ããŠäžæ£ç¢ºã§ããã
@KarlXOLãã®æããªããæããã®ãåŸãããŸããã ãã³ãã¬ãŒãããã®å Žã§äº€æã§ããããšãããã®ãããªäžè¬çãªèšå®ã䜿çšãããããåªããŠãããšã¯æããŸããã ããã«ãããããã20LOCã®ã³ã³ããŒãã³ããå®çŸ©ããã ãã§æžã¿ãŸãã
@ mlc-mlapisWebéçºã®ã¬ãã¹ã³ãããããšãããããŸãã ããªããèšã£ãããã«ãããã¯ã°ãŒã°ã«ãã©ã®ããã«ãŠã§ããã¬ãŒã ã¯ãŒã¯ãéçºãããã«ã€ããŠã§ãã ç§ã®èŠæ±ã¯ãäŒæ¥ã«ããžãã¹ãœãªã¥ãŒã·ã§ã³ãæäŸããæ¹æ³ãšããã®ããã®ããŒã«ãšãã¬ãŒã ã¯ãŒã¯ãã©ã®ããã«å©çšããããšãã芳ç¹ããã®ãã®ã§ããããšãèªããªããã°ãªããŸããã ããªããè¿°ã¹ãããã«ãã¬ãŒã ã¯ãŒã¯ãéçºããããšã«å ããŠãä»ã®ããã€ãã®èŠä»¶ãšããŒãºãçããŸãã ãã®ãããªèŠä»¶ã«ã€ããŠãè©äŸ¡ããŠããã ããã°å¹žãã§ãã æåŸã«ãç§ãã¡å šå¡ããäºãããããå€ãã®å©çãåŸãã§ãããããããŠè§åºŠ2ã¯ãã匷åãªãã¬ãŒã ã¯ãŒã¯ã§ããå¯èœæ§ããããŸãã
@Toxicableãµã³ãã«ã¯ããã³ãã¬ãŒãããªã³ã¶ãã©ã€ã§äº€æããããšã§ã¯ãªããããŒã¿ã¢ã¯ã»ã¹ãµãŒãã¹ãæäŸããããšãç®çãšããŠããŸãããã³ãã¬ãŒãã亀æããããã®ä»ã®ãã¹ãŠã®å®è£ ïŒå®éã«ã¯ãµããŒããããŠããŸããïŒã¯ãåçãªã¢ãžã¥ãŒã«/ã³ã³ããŒãã³ãã®äœæã«ãã£ãŠå®è¡ãããŸããã¬ãã«è§åºŠã®å®è£ ã
@KarlXOLã¯ããããã£ãŠããŸããç§ã®ãµã³ãã«ã¯ããã³ãã¬ãŒãã亀æããããšã§ã¯ãããŸããã§ããã ããªããèšã£ãïŒ
CRUDæ©èœãªã©ããµãŒãã¹ã«ã«ãã»ã«åããæ¹æ³ã®äŸãããã°ããã²ã芧ãã ããã ãããå¯èœã§ãããšããŠããäŸãã°è£œåããšã«ã³ã³ããŒãã³ããå®è£ ããå¿ èŠããããŸãã
ãããç§ãããããšã§ãã ç§ã¯ããªããããã解決ãããæ¹æ³ã§ã¯ãªããããªãã®åé¡ã«å¯Ÿãã解決çãæäŸããŸããããããã§ãããã¯è§£æ±ºçã§ãã ããããç§ã®äž»åŒµã¯å€ãããŸããã ã©ããããããå¯èœã§ããã°ããã³ãã¬ãŒããå ¥ãæ¿ããŠäœãåŸãããã®ãããããŸãããã©ã¡ãã®å Žåãããã³ãã¬ãŒãã³ãŒããäœæããå¿ èŠãããã®ã§ãéåžžã«å€§éã®äœæ¥ã§äœãåŸãããã®ã§ããããããã¬ãŒã ã¯ãŒã¯ã«ãã®ãããªãã®ãå®è£ ããããšã«ããã«è¿ã¥ãã«ã¯æéãããããŸããïŒ
@ToxicableExact ã ããªãã¯ãã€ã³ããåŸãŸããã ãã³ãã¬ãŒãã³ãŒããæžãã ãã§ãã ä»ã®ãã¹ãŠã®ã³ãŒãã¯å€æŽãããŸãã!! äžããã®ãµãŒãã¹ãå«ãããã¹ã¿ãŒããŒã¿ç®¡çã®äžè¬çãªå®è£ ãæ³åããŠã¿ãŠãã ããã ãã³ãã¬ãŒããå€æŽããã ãã§ãå¥ã®ããŒãã«ïŒããžãã¹ãªããžã§ã¯ãïŒãå®è£ ãããŸãã å°ãªããšãããã¯Angular1ã§å¯èœã§ãã
@KarlXOLãããŠããã®ããªã³ã·ããåºãç¯å²ã§é©çšããå Žåãããã¯å®éã«ã¯åé¡ã§ãã å€ãã®ã³ãŒããå®è¡æã«ã³ã³ãã€ã«ããããããé©åãªãã¹ããè¡ãããšãã§ããªããããå®è¡æã«ã®ã¿å€ãã®é ãããšã©ãŒãèŠã€ããããšãã§ããŸãã ãããŠãããã¯åãå ¥ããããŸããã ããªãã¯ãã®æŠå¿µãå°ããªèŠæš¡ã§ããéã¶ããšãã§ããŸããããããŠããã§ãããªãã¯å€ãã®äºæž¬äžå¯èœæ§ãå±éºã«ãããã§ãããã
ãã³ãã¬ãŒããå€æŽããã ãã§ãå¥ã®ããŒãã«ïŒããžãã¹ãªããžã§ã¯ãïŒãå®è£ ãããŸãã
@ mlc-mlapis確ãã«ãããªãã¯æ£ããã§ãã ããããçµæãšããŠãè§åºŠ2ããã³ã³ãã€ã©ãŒãåé€ããå¿ èŠããããŸããããã¯ãååãšããŠãç§ãããããããšããã§ã«éæã§ããããã§ãã è€éãããŸãã
ç§ã¯ããªãã®è°è«ã匷調ããããŸãããããã¯ããªããã¢ããªã±ãŒã·ã§ã³ã§åŠçããŠãããã¹ãŠã®çš®é¡ã®ããŒã¿ïŒããŒã¿ããŒã¹ãªã©ïŒãå«ã¿ãŸãã ãã¹ãŠããã¹ãããããšã¯ã§ãããã¢ããªã±ãŒã·ã§ã³ãããŒãžã£ãŒã®è²¬ä»»ã«åžžã«äœããæ®ãããŸãã
ç§ãã¡ã®è°è«ã«æ»ããšãå¿
èŠãªã®ã¯ãç§ã®æèŠã§ã¯ãå®çšäž»çŸ©ãšå»ºç¯ããžã§ã³ã®é©åãªçµã¿åããã§ãã ããžã§ã³ãäžããããŠãããããã¯ç¢ºãã§ãã ãããŠãããã€ãã®å®çšäž»çŸ©ãè§åºŠ2ã®åå©ã«ãªãå¯èœæ§ããããŸããç§ã®èŠä»¶ã¯ãšããŸããã¯ã§ã¯ãªããããã«ããå€ãã®äººã
ã«å¿
èŠãšãããŠããŸãã
@KarlXOLç§ã¯ããªãã®è°è«ã®ããã€ãã«åæããããšãã§ããŸãã ããããå察åŽã«ã¯ãããè¯ãã¢ããªãåŸããããšããçç±ã ãã§ãã¢ããªã±ãŒã·ã§ã³ã®æŠå¿µãåèããå¿ èŠãããå ŽæããããŸãã
ãã®èŠ³ç¹ããAngularã³ã¢ããŒã ã®ç«å ŽãéèŠã§ãããããããããè°è«ã¯çµããã§ãã ãªãAOTãä»å¥œãŸããŠããã®ããããã€ãã®èæ¯çãªè°è«ãè¡šçŸãããã£ãã ãã§ãã
KarlXOLã®ãªãã·ã§ã³ã«åæããŸãã ç§ã®äŒç€Ÿã®èŠä»¶ã§ã¯ãåçæ§æãå¿ èŠãªUIãéåžžã«å€ããããŸãã ããã¯angular1ã§ããŸãæ©èœããŸãããangular1ãangular2ã«ç§»è¡ãããšãã²ã©ããªããŸãã æåŸã«ãDynamicComponentLoaderãèŠã€ããããã䜿çšããŠåé¡ã解決ããŸããã ããããæè¿å€ãã®é¡§å®¢ããèŠæ ãå¯ããããŠãããããããã©ãŒãã³ã¹ã¯åãå ¥ããããŸããã
瀟å ã§è©±ãåããŸããã ç§ã®äŒç€Ÿã®éçºè ã®ã»ãšãã©ã¯ãAngular2ãå€ãã®éçïŒå¶åŸ¡å¯èœãªïŒããšãè¡ã£ããšèããŠããŸãã éçºè ã¯ãåçãã³ãã¬ãŒããåçå€æŽèšèªãªã©ã®åçãªãã®ãæ±ãããšãå¶éãããŠããŸãããå人çã«ã¯ãæè»æ§ã倱ããããšæããŸãã ãŸããAngular 2ã¯ããããã®çš®é¡ã®åçæ©èœãããç°¡åã«æäŸããããšã匷ããå§ãããŸãã
ç°ãªãã³ã³ããŒãã³ãã§ã¯ãªããç°ãªããã³ãã¬ãŒããå¿ èŠãªã®ã¯ãªãã§ããïŒ ãããããAngularã§ã³ã³ããŒãã³ããç¶æ¿ããããšãå¯èœã§ããããšãèŠéããŠããŸããïŒ ããšãã°ã httpsïŒ //medium.com/@amcdnl/inheritance-in-angular2-components-206a167fc259ãåç §ããŠ
ããªãã®æšèŠãããããšãã ãããã解決çã¯ç§ãæããã®ã§ã¯ãããŸããã ç§ã®ã·ããªãªã¯ããã¥ãŒãã³ãã¬ãŒãããã¶ã€ããŒãŸãã¯ééçºè
ã«ãã£ãŠåçã«æ§æãããããŒã¿ããŒã¹ã«ä¿åããããšãããã®ã§ãã ããžãã¯ã¯ã»ãšãã©ã®ç¶æ³ã§ä¿®æ£ãããŠããŸãã ã¬ã€ã¢ãŠãã®åèšèšãŸãã¯ãã£ãŒã«ãã®è¿œå /ãã€ãã¹ãå¿
èŠãªèŠä»¶ã®ã¿ã
ããã¯ãCRM / ERPãã¡ã€ã³ã§éåžžã«äžè¬çãªåäœã§ãã odooã®ããã«ããã£ãŒã«ãããã©ãã°ã¢ã³ãããããããŠãããŸããŸãªæ¥çã®ããŸããŸãªãã©ãŒã ãçæããŸãã
ããã£ãã 次ã«ãããªããããªããã°ãªããªãå¯äžã®åé¡ã¯ãããªãã説æããããã«ãŠãŒã¶ãŒå®çŸ©ã®ãã³ãã¬ãŒããæ°ããã³ã³ããŒãã³ãã«ã³ã³ãã€ã«ããããšã§ã...ãã¡ãããµãŒããŒäžã§...ããã¯ãã®æ°ããã³ã³ããŒãã³ããå«ãæ°ããã¢ãžã¥ãŒã«ãäœæããŸã...ãã©ã°ãä¿åããŸã...ãã®è©³çŽ°ã¯ãã®æ°ããã³ã³ããŒãã³ãã«ãã£ãŠã¬ã³ããªã³ã°ãããå¿ èŠããããŸã...ãããŠãªã³ããã³ãã§æ°ããã¢ãžã¥ãŒã«ãé©åãªã¿ã€ãã³ã°ã§ããŒããããšããããã€ãã®æ§æã
@ mlc-mlapis
ãã®æ©èœã®ãªã¯ãšã¹ããšã¹ã¬ããã泚ææ·±ãèªããšãææ¡ããŠãããœãªã¥ãŒã·ã§ã³ãããåªãããœãªã¥ãŒã·ã§ã³ãããããã®ãœãªã¥ãŒã·ã§ã³ã¢ãããŒãã«äŒŽãèŠçãæ··ä¹±ãåé¿ã§ããããšãããããŸãã
@ robert-luoqingã¯ãéåžžã«äžè¬çãªã·ããªãªãšãã®æ©èœã®å¿
èŠæ§ã«ã€ããŠéåžžã«ãã説æããŸããã
@KarlXOLç§ã¯ç¥ã£ãŠããŸãã ç§ãç解ããŠããªãå¯äžã®ç¬éã¯ãã«ã¹ã¿ã ãã³ãã¬ãŒãã®å¯äžã®JiTåçã³ã³ãã€ã«ãä»æ¥ãã§ã«å©çšå¯èœã§ãããããã¯åžžã«ããã«ãã£ããšããããšã§ã...ããããäžèšã®å®åŒåã¯ããã®æ©èœãæ¬ èœããŠããããšã瀺ããŠããŸãã
ãã®å ŽåãAoTã䜿çšã§ããªãããšã¯æããã§ããããããã䜿çšã§ããªãçç±ãç解ããŠããã§ãããã
ãããã£ãŠãããŒãã«ã«ããã®ã¯ãJiTã¢ãŒãã§åçãã³ãã¬ãŒãã®ã³ã³ãã€ã«ãè¡ãããã®some more user friendly Angular APIs
ã ãã§ãã AoTã¢ãŒããšã®äºææ§ããªããŠãã
@ mlc-mlapis
ããžãã¹ããŒãºããµããŒãããããã«ãå®çšçã§ä¿å®å¯èœãªãœãªã¥ãŒã·ã§ã³ãæäŸããå¿
èŠããããŸãã Angular 2ã¯ãéåžžã«æŽç·ŽããããœãããŠã§ã¢ãã¯ãããžãŒãæäŸããããšã«ãããããã®åºç€ãç¯ããã¬ãŒã ã¯ãŒã¯ã§ãã ã ããç§ã¯ïŒãŸã ïŒããã䜿ã£ãŠããŸãã
äžæ¹ãAngularã«ã¯ãéåžžã«äžè¬çãªèŠä»¶ããµããŒãããããã®ã䜿ããããããæ¬ ããŠããŸãã ããšãã°ãããã§èª¬æããŠãããã®ãšããŠã ãšã©ãŒã¡ãã»ãŒãžïŒéçºããã³ã©ã³ã¿ã€ã ïŒãUIãã¬ãŒã ã¯ãŒã¯ãªã©ã«ãæ¹åã®äœå°ããããŸãã
ãœãªã¥ãŒã·ã§ã³ãæäŸã§ããããšã¯ãããªãããã€ãèããŠããããšãããç§ã«ãšã£ãŠéèŠã§ãïŒAoTãéçåãã§ãã¯ãããªãŒã®æºãã.... !!! ïŒããšãã°ãJITã¯éåžžååã«é«éã§ãïŒ
ãã¡ããããã¯éèŠã ãšæããŸããããæ®éã®ãéçºè
ãå¿
èŠãšããŠããããšãå¿ããŠãããããªå°è±¡ãåããããšããããŸãã
OKããããªãç§ãã¡ã¯ãäºããç解ããŠããŸãã ä»ã®äºæã¯ãäœçŸãã®å¯èœæ§ã®ããã±ãŒã¹ãããã®ã§ãç°ãªãã¿ã€ãã®ãããžã§ã¯ãã«ãšã£ãŠäœãéèŠã§äœãéèŠã§ãªããã«ã€ããŠã®åªå é äœãšäžè¬çãªæèŠã§ãã
ãã®æ©èœã¯çŽ æŽãããã§ãããã ç§ãåãçµãã§ããERPãããžã§ã¯ãã«ãåæ§ã®èŠä»¶ããããŸãããæ®å¿µãªããããããåå ã§ãAngularã奜ããªã ã䜿çšã§ããŸããã
ç§ããã®æ©èœãæ¯æããŸãã
ããŒã¿ããŒã¹ããããŒãžãæäŸãããšã³ã¿ãŒãã©ã€ãºã³ã³ãã³ã管çã·ã¹ãã ããããŸãã ãšã³ããŠãŒã¶ãŒã¯ãHTMLããã¹ããšãã£ã¿ã䜿çšããŠHTMLãã¡ã€ã«ãå€æŽã§ããnåã®ã¿ã¹ã¯ãå®è¡ã§ããŸãã
Angularã䜿çšããŠã¯ã©ã€ã¢ã³ãã¢ããªã±ãŒã·ã§ã³ãåéçºãããã®ã§ããããã®æ©èœãåå ã§åæ¢ããŠããŸãã
@ asadmalik3ãã€ãããã¯HTMLãããŸã䜿çšã§ããŸããããã€ãããã¯ãã³ãã¬ãŒããç°¡åã«äœ¿çšããããšã¯ã§ããŸããã ãã³ãã¬ãŒãã¯HTMLã§ã¯ãªãåãªãJSã³ãŒãã§ãããAOTã§å®è¡ããã«ã¯ãã³ã³ãã€ã«ããå¿
èŠãããããšãæãåºããŠãã ããã
ãããã£ãŠãCMSåã·ã¹ãã ã®å ŽåããŠãŒã¶ãŒãæ°ããAngularã³ã³ããŒãã³ãããã€ãããã£ã¬ã¯ãã£ãããŸãã¯ãµãŒãã¹ãè¿œå ããã«HTMLãç·šéã§ããããã«ãããšã100ïŒ
åé¡ãªãå®è¡ã§ããŸãã å®è¡æã«æ¢åã®ã³ã³ããŒãã³ãã䜿çšããŠãã¢ããªã±ãŒã·ã§ã³ã§ã³ã³ãã€ã«ãããäœæ¥ã³ã³ããŒãã³ãã«çœ®ãæããããšãã§ããŸãã ãããŠããã®äŸã¯angular.ioã§ããhttps ïŒ //github.com/angular/angular/blob/master/aio/src/app/layout/doc-viewer/doc-viewer.component.tsãåç
§ããŠ
Angularã§ã¯AngularJSããç¶æ³ãæ¹åãããAOTã®ãããªã¢ããªã±ãŒã·ã§ã³ã¯ã¯ããã«é«éã«ãªãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåäžããŸãããç¶æ³ã«ãã£ãŠã¯ããŸã£ããåãããã«æ©èœããããšãæåŸ
ããã®ã§ã¯ãªããå¥ã®èŠ³ç¹ããåé¡ã«ã€ããŠèããå¿
èŠããããŸãã以åãšåãããã«ã
@Toxicableã³ã³ããŒãã³ãããã®å Žã§äœæããããšã®ããã©ãŒãã³ã¹ãžã®åœ±é¿ã¯äœã§ããïŒ ã³ã³ããŒãã³ãããã®å Žã§äœæãããµã³ãã«ãéçºããæ¬çªç°å¢ã§äœ¿çšããåã«ãã®ããã©ãŒãã³ã¹ãè©äŸ¡ããããšèããŠããŸãã
æåã«èæ
®ãã¹ãããšã¯äŸåé¢ä¿ã§ãã ç°ãªãäŸåé¢ä¿ãæã€ã³ã³ããŒãã³ãããã®å Žã§äœæãããšãåé¡ãçºçããå¯èœæ§ããããŸãã
次ã«ããã©ãŠã¶ãŒã§Angularã³ãŒããã³ã³ãã€ã«ãããšããŠãŒã¶ãŒããã»ããµãŒã100ïŒ
䜿çšããŸãã
第äžã«ãé
ããŠå€§ããªJITã³ã³ãã€ã©ã«æ°žé ã«é£œããŠããŸããŸã
ããã¯ãã¢ããªã±ãŒã·ã§ã³ãJITã¢ãŒãã§å®è¡ããããšã§ç¢ºèªã§ããŸãã
@Toxicableãªã³ã¶ãã©ã€ã§äœæãããã³ã³ããŒãã³ãã«äŸåé¢ä¿ãæž¡ãã«ã¯ã©ãããã°ããã®ã§ããããã
ãããäœæããã³ã³ããŒãã³ãã®è²¬ä»»ã§ããïŒ ããã®ãŸãšããªäŸãèŠããŠãããŸãããïŒ
åãããŒãºããããŸãã åã«ãã客æ§ãããŒã¿ã®èŠèŠç衚瀺ãä»»æã®æ¹æ³ã§æŽçã§ããããã«ããŸãã åãè§åºŠã®ã³ã³ããŒãã³ãã䜿çšããŸããã¯ã©ã€ã¢ã³ãããšã«HTMLãåç·šæããå¿ èŠããããŸãã 10ã20ã®åœ¹å²ãæã€æ°çŸã®ã¯ã©ã€ã¢ã³ãããããå圹å²ã¯äžæã®ã¬ã€ã¢ãŠããåãANGULARã³ã³ããŒãã³ããæã€ããšãã§ããŸãã ããããäžè¬çãªAngularã³ã³ããŒãã³ãã䜿çšããæ°çŸã®åºæã®HTMLãã³ãã¬ãŒãããããŸãã ããã¯çããããšã§ã¯ãããŸããã Angularã䜿çšããŠãã©ãŒã ãåçã«äœæããããšãæ€èšããŸããããããã¯æ©èœããå¯èœæ§ããããŸãããHTMLãã³ãã¬ãŒãããã£ãã·ã¥ããŠæºåããæ¹ãã¯ããã«é«éã§ãã HTMLã ãã§ãªããåçã«æŽŸçããå¿ èŠã®ããã³ã³ããŒãã³ãã«åçã«äœæããããšãæ€èšããŸããããããå®è¡ãããããšãæåŸ ããŠããããã§ã¯ãããŸããã ãããã£ãŠãHTMLãã³ãã¬ãŒãã«åãæ£ç¢ºãªAngularã¢ãŒãã£ãã¡ã¯ãïŒäŸåé¢ä¿ãã³ã³ããŒãã³ããªã©ïŒãå«ãŸããŠããå Žåã¯ããã³ãã¬ãŒãã亀æããŠæ°ããã¬ã€ã¢ãŠããååŸã§ããã¯ãã§ãã
@ asadmalik3芪Injector
ããã®å Žã§äœæãããã³ã³ããŒãã³ãã«æž¡ããŠãæ¢åã®ãµãŒãã¹ã䜿çšã§ããããã«ããŸãã æ°ãããµãŒãã¹ãå¿
èŠãªå Žåã¯ãã¢ãžã¥ãŒã«ã«ããŒãããå¿
èŠããããŸã
@glwbkfsãã§ã«è¿°ã¹ãããšãæ£ç¢ºã«è¡ãããšãã§ããangular.ioã¯ãŸãã«ãããè¡ããŸãã ãããã¯ãå®è¡æã«ãããã®ã³ã³ããŒãã³ãã®htmlãæ¢åã®å®è¡äžã®ã³ã³ããŒãã³ããšäº€æãããåã³ã³ãã³ãããŒãžã§ç°ãªãæ¹æ³ã§ç·šæãããåãAngularã³ã³ããŒãã³ãã䜿çšããŸãã
äŸã¯ããã§èŠãããšãã§ããŸãhttps://github.com/angular/angular/blob/master/aio/src/app/layout/doc-viewer/doc-viewer.component.ts
ãã®ã©ã€ãã©ãªã§ãåãããšãã§ãããšæããŸãhttps://github.com/laco0416/ng-dynamic
åºæ¬çã«ãåçã«äœæããããã®ãæãŸãªãéããAngularãæäŸã§ãããã®ã®é åã«å®å
šã«ããŸãã
@Toxicableäºåã«ã¬ã³ããªã³ã°ãããhtmlããµãŒããŒããè¿ããããšããdoc-viewerã³ã³ããŒãã³ãã«è¡šç€ºããããã®ã äºåã«ã¬ã³ããªã³ã°ãããhtmlããµãŒããŒã«ä¿æããããªãã®ã§ãhtmlãã³ãã¬ãŒããååŸããŠãã³ã³ããŒãã³ãã§ã¬ã³ããªã³ã°ããŸãã ã©ãããã°ãããéæã§ããŸããïŒ
@ asadmalik3äºåã«ã¬ã³ããªã³ã°ãããhtmlã®æå³ãããããŸãããïŒ
å
¥åããã¥ã¡ã³ãã¯ãã©ã®htmlããŒãžã«ãããéåžžã®htmlã§ãã
ãããã©ã®ããã«æ©èœããã誀解ãããããããªãã®ã§ãç§ã¯ãããã©ã®ããã«é©çšãããããšãã§ãããã«ã€ããŠã®å°ããªãã¢ãããã§äœããŸãã
https://plnkr.co/edit/B5aIMZ7rYCLn1WizqUnW?p=preview
ãµãŒããŒããè¿ãããHTMLã«{{title}}ã®ãããªãã®ãããå Žåãangularã¯ããªãã®ææ³ã䜿çšããŠããã解決ããŸããã
@ asadmalik3ããããããã¯èšããªãã£ãã
{{title}}
ãããªããšãããããã«ã¯ããã³ãã¬ãŒããã³ã³ãã€ã«ããå¿
èŠããããšç§ã¯èšããŸãã
åºæ¬çã«ãåçã«äœæããããã®ãæãŸãªãéããAngularãæäŸã§ãããã®ã®é åã«å®å šã«ããŸãã
ã€ãŸããæ©èœããªããã®ãã³ã³ãã€ã«ããå Žåã¯ãæ¢åã®ã³ã³ããŒãã³ãã§ã®ã¿æ©èœããŸãã
ãµãŒããŒããéçHTMLãæäŸããå¿ èŠãããã®ã«ããªãè§åºŠãéžæããã®ã§ããïŒ ç§ã®è¬èãªæèŠã§ã¯ããã®ããã¥ã¡ã³ããã¥ãŒã¢ã®äŸã¯åœ¹ã«ç«ããªãã®ã§ãä»ã®äººãšå ±æããã¹ãã§ã¯ãããŸããã ã©ã®ãšã³ã¿ãŒãã©ã€ãºããžãã¹ã¢ããªã±ãŒã·ã§ã³ã§ãããµãŒããŒäžã«ããªã¬ã³ããªã³ã°ãã³ãã¬ãŒãïŒhtmlïŒãããããŸã§ãæã£ãŠãã人ã¯èª°ãããŸããã åæ§ã®ããŒãžã¯ãåžžã«ã¯ã©ã€ã¢ã³ãããšã«ç°ãªãããŒã¿ã§ã¬ã³ããªã³ã°ãããŸãã
ä»åŸã¯ããµãŒããŒãããã³ãã¬ãŒããååŸããŠå®è¡æã«ã³ã³ãã€ã«ããããã®ãç°¡åãã§ã蚱容ã§ãããæ¹æ³ãæäŸããå¿ èŠããããšåŒ·ãæããŠããŸãã ã¢ããªã±ãŒã·ã§ã³ã100ïŒ è¶ é«éã«ããããããŸããã90ïŒ ã®ããã©ãŒãã³ã¹ã§æºè¶³ããŸãããæè»æ§ãåŸãããã¯ãã§ãã
@Toxicableãã®ãã©ã³https://embed.plnkr.co/jkWaZnfaH8bD7787BM5W/
補åã®ãªã¹ããšã¯ã©ã€ã¢ã³ãã®ãªã¹ãããããŸãã 補åã®ãªã¹ããäžçªäžã«è¡šç€ºãããç¶ããŠã¯ã©ã€ã¢ã³ãã®ãªã¹ãã衚瀺ãããŸãã
ç§ã®ã¯ã©ã€ã¢ã³ãã®1人ãé åºãå€æŽãããã®ã§ãããã¯ã©ã€ã¢ã³ãã¯æåã«ã¯ã©ã€ã¢ã³ãã®ãªã¹ãã衚瀺ãã次ã«è£œåã®ãªã¹ãã衚瀺ããããšèããŠããŸãã ãã®å Žåãç§ã¯åãã§ã¯ã©ã€ã¢ã³ãã«Webãšãã£ã¿ãŒãªã©ã䜿çšããŠhtmlãå€æŽããããã«äŸé ŒããŸãã
ããããä»ãäžã§èª¬æããããã«é åºãå€æŽããå¿ èŠãããå Žåããããå®çŸããããã«æ°ããã³ã³ããŒãã³ããäœæããå¿ èŠãããããã§ãã
ãããã£ãŠãæåã«è£œåã衚瀺ãã次ã«ã¯ã©ã€ã¢ã³ãã衚瀺ãã1ã€ã®ã³ã³ããŒãã³ããšãæåã«ã¯ã©ã€ã¢ã³ãã衚瀺ãã次ã«è£œåã衚瀺ãã2çªç®ã®ã³ã³ããŒãã³ãããããŸãã
@ asadmalik3ãããåçã§ããå¿
èŠãããçç±ã¯ãŸã£ããããããŸããã ã¯ã©ã€ã¢ã³ãã«HTMLã®ç·šéãäŸé ŒããŸããïŒ
é åºãå€æŽããã ãã§ããïŒ ã©ãããŠïŒ
é åºãå€æŽããŠDBã«ä¿åããUIèŠçŽ ïŒéžæããã¯ã¹ãªã©ïŒãäœæããå床éãããšãã«ããã®é åºã®éžæãèªã¿èŸŒãã§å®äºããŸãã
ããã¯ãããŒã¿ã®é åºãå€æŽããããšã§ã¯ãªããã¯ã©ã€ã¢ã³ãã«æäŸããæè»æ§ã«é¢ãããã®ã§ãã ã¯ã©ã€ã¢ã³ãã«ããŒãžã®htmlã®ç·šéãèš±å¯ãããšãã«çºçããå¯èœæ§ã«ã€ããŠèããŠã¿ãŠãã ããã ããªãã¯åœŒãã«ã»ãšãã©äœã§ãã§ããããã«ããŠããŸãã ã¯ã©ã€ã¢ã³ãã®1人ããã¯ã©ã€ã¢ã³ããã»ã¯ã·ã§ã³ã®äžã«ç»ååºåãé 眮ãããå Žåã¯ã©ããªããŸããïŒ ãã1ã€ã¯ã補åã»ã¯ã·ã§ã³ã®åã«ããã€ãã®éèŠãªæ å ±ãæ瀺ã衚瀺ãããã§ããïŒ ããã¯ãã¹ãŠããã«ããã圌ãã¯åœŒããããããããšãäœã§ãããããšãã§ããŸãã
ããã«ããã¹ãŠã®ã¯ã©ã€ã¢ã³ããããŒããããŒãœãã©ã€ãºããŠå¿ èŠã«å¿ããŠããŒã¿ã衚瀺ããããããã¯ã¹ã¬ã€ã¢ãŠããæãã§ããã¯ã©ã€ã¢ã³ãã衚圢åŒã§ããŒã¿ã衚瀺ãããã¯ã©ã€ã¢ã³ãããã¹ãŠã®ã¯ã©ã€ã¢ã³ããšäžç·ã«ç»åã衚瀺ãããã¯ã©ã€ã¢ã³ãããããŸã補åãªã©ãç§ãã¡ã¯åº§ã£ãŠããããã¹ãŠã®å€æŽãè¡ãããšã¯ãããŸãããæè»æ§ãæäŸããã¯ã©ã€ã¢ã³ãã¯ããããã¹ãŠã®å€æŽãèªåã§è¡ãããšãã§ããŸãã ããã§éèŠãªã®ã¯æè»æ§ã§ãã
ãã®èšäºã®ãããªæå³ã§ããïŒ
https://medium.com/@DenysVuika/dynamic -content-in-angular-2-3c85023d9c36
èšäºãèªã¿ãŸããã ãã©ã³ã¿ã€ã ã³ã³ãã€ã«ãã¯ç§ãå¿ èŠãªãã®ã§ãã ããããKarlXOLãèšã£ãããã«ããœãªã¥ãŒã·ã§ã³ã¯è€éãããŠéãããŸãïŒã³ã³ãã€ã«ãããã¢ãžã¥ãŒã«ã¯ä»ã®3çªç®ã«å¿ èŠãªã¢ãžã¥ãŒã«ãªã©ãåç §ããå¿ èŠããããŸãïŒã ãŸãããã¹ããããšãããAOTã§ã¯ããŸãæ©èœããŸããã§ããã ãç§ã¯å人çã«ãã³ã³ããŒãã³ãã®ãã³ãã¬ãŒããäœããã®æ¹æ³ã§åçã«èšå®ã§ããããAOTã®åäœãå£ããªãããŸã£ããã§ã·ã³ãã«ãªãœãªã¥ãŒã·ã§ã³ãå¿ èŠã§ããã ãããç§ã欲ãããã®ã§ãã
ãšããã§ããåçã³ã³ãã³ããã¯ãã¢ãžã¥ãŒã«ã«ãã§ã«ååšããã³ã³ãã³ãã³ã³ããŒãã³ãã ãã§ã¯ãªããã¢ããªã¯ãŠãŒã¶ãŒã®éžæã«ãã£ãŠåç §ããŠè¡šç€ºããã ãã ãšæããŸãã ãã ããã³ã³ãã³ãã³ã³ããŒãã³ããå®è¡æãŸã§äžæã§ãã ãŠãŒã¶ãŒå ¥åãŸãã¯ãªã¢ãŒãæ§æã«ãã£ãŠçæãããŸãã
+1
ã³ã³ããŒãã³ããã³ã¬ãŒã¿ã§ãã³ãã¬ãŒããšããŠpromiseãŸãã¯observableãæäŸã§ãããšäŸ¿å©ã§ãã 次ã«ãããã¯ãšã³ãã«ãã£ãŠãã³ãã¬ãŒããæäŸããããšãã§ããŸãã
ããã
çŸåšãå®è¡æã«ã«ã¹ã¿ã ã³ã³ããŒãã³ããã³ã³ãã€ã«ããæ¹æ³ãæ¢ããŠããŸãã ç§ãã¡ã®ãŠãŒã¹ã±ãŒã¹ã¯ãAngular4ãã©ãŒã ã䜿çšããŠç·šéãããå€ãã®ããŒã¿ãå«ãHTMLã¡ãŒã«ããã¬ãã¥ãŒããããšã§ãã
çŸåšãå®å šãªWebããŒãžãå«ãå£ã²ããã³ãã¬ãŒãã䜿çšããŠããããã¹ãŠã®å€æ°ã眮ãæããã³ã³ãã³ããiframeã«é 眮ããiframeã®ãã£ã¡ã³ã·ã§ã³ãæŽæ°ããŸãã
ããã¯åé¡ãªãæ©èœããŸãããiframeã®ã³ã³ãã³ãå šäœãäœåºŠã眮ãæãããããããã¡ãã€ããçºçããŸãã
HTMLãã³ãã¬ãŒãã¯ãæ¢åã®éžæïŒãµãŒãããŒãã£ã«ãã£ãŠæäŸãããïŒãããŠãŒã¶ãŒã«ãã£ãŠéžæããããããŠãŒã¶ãŒã«ãã£ãŠçŽæ¥ç·šéããããããAOTã䜿çšããŠããããã³ã³ãã€ã«ããããšã¯ã§ããŸããã
ç§ã¯ä»ã®ãœãªã¥ãŒã·ã§ã³ã«ãèå³ããããçŸåšãAngularãã»ãšãã©ãã€ãã¹ãã {{var_name}}
ã<span id="var_name"></span>
ã«çœ®ãæããŠãããçŽç²ãªjsã䜿çšããŠãã®ã眮ãæãããšããèããããã£ãŠããŸãã
äžæ¹ãããã«ãããAngularã解決ããããã«èšèšããããã®ãå®è£ ããå¿ èŠããããŸãããã®ãããAOTã®æ©èœã倱ãããããšãæå³ããå Žåã§ãããããå®è¡ãããªãã·ã§ã³ããããšäŸ¿å©ã§ãã
AOTã䜿çšããŠã¢ããªãã³ãŒãã£ã³ã°ãã@ angular / dynamic-templatesãè¿œå ããŠãå¿ èŠãªæ©èœãè¿œå ããã¢ããªã®æ®ãã®éšåãAOTããŒãžã§ã³ãšããŠæ©èœãããããã«ãããã¯å¥ã®ãããžã§ã¯ãã§ããå¿ èŠããããŸãã ïŒæåã¯ããããŠãŒã¶ãŒãã¬ã³ããªãŒã«ãªãããã«JITãåããã±ãŒãžåããã ãã§ããããããã«åªåããã°ããŸã£ããå¥ã®ãã®ã«é²åããå¯èœæ§ããããŸãïŒ
ã©ãæããŸããïŒ
ããã ãŠãŒã¹ã±ãŒã¹ã¯å€å°ç°ãªããŸãããæ©èœãªã¯ãšã¹ãã¯ãã®åé¡ã®éè€ã§ãããšã¢ããã€ã¹ãããŸããã
ç§ã®äŒç€Ÿã«ã¯ãæ¶è²»è ãåœã®å ¬çç»é²ç°¿ããå ¥æã§ããäžåç£ããŒã¿ãæ€çŽ¢ã§ããã¢ããªã±ãŒã·ã§ã³ããããŸãã ãŠãŒã¶ãŒãããããã£ãéžæãããšãå©çšå¯èœãªããŒã¿ãå«ãã¬ããŒãã衚瀺ãããŸãã ãã®ã¬ããŒãã¯ãµãŒãããŒãã£ã«ãã£ãŠçæãããçŽç²ãªhtmlïŒåãªã倧ããªããŒãã«ïŒã§ãã ã¬ããŒãã®äžéšã®èŠçŽ ã«ã¯ããŠãŒã¶ãŒãè³Œå ¥ã§ããä»ã®æ å ±ãžã®ãããããªã³ã¯ããå«ãŸããŠããŸãã ãããã®ãããããªã³ã¯ãã¯æ確ã«ããŒã¯ãããŠãããç°¡åã«éžæã§ããå±æ§ãšããŠãªã³ã¯ãçæããããã«å¿ èŠãªãã¹ãŠã®æ å ±ãå«ãŸããŠããŸãïŒåºæ¬çã«ããŸããŸãªããã¥ã¡ã³ããžã®äžæã®èå¥åïŒã ç§ãã¡ã®ã¢ããªã±ãŒã·ã§ã³ã¯çŸåš2ã€ã®èšèªããµããŒãããŠãããããJiTã³ã³ãã€ã«ã«ã¯æ°žé ã«æéãããããŸãã
ç§ã®çŸåšã®è§£æ±ºçã¯ããµãã¿ã€ãºãããhtmlãã³ã³ããŒãã³ãã®innerHtmlã«ãã€ã³ãããããšã§ãã AfterViewInitãã§ãŒãºäžã«ãã³ã³ããŒãã³ãã¯ãã®htmlããã©ããŒã¹ããprotolinksãanchor-elementsã«çœ®ãæããŸãã ç©äºã¯ããŸãæ©èœããŠãããšæããŸãïŒå°ãããããŒã§ãããç§ã¯ããã§ããªã倧äžå€«ã§ãïŒã ãã ããrouterLinksã䜿çšã§ããã°ãæ°åãè¯ããªããŸãïŒãããã®ããšã«ã€ããŠã¯ãå°ãèªéçã«ãªãå¯èœæ§ããããŸãïŒã
ããã²ãŒã·ã§ã³ã®ã¿singlePageã¢ããªå
ã§çºçããã¡ããã©ç§ã®æ²ãããã³ããªãããã®ããŒãžãªãã¬ãã·ã¥ãæã¡ãŸãã
çæ³çã«ã¯ãä¿¡é Œã§ããhtmlãå°ãã³ã³ãã€ã«ã§ããã³ã³ããŒãã³ããšãã£ã¬ã¯ãã£ãïŒrouterlinkãªã©ïŒã®ãã¯ã€ããªã¹ãããªããšãããŠå®£èšããæ¹æ³ããããšæããŸãã ããã¯ãAoTã³ã³ãã€ã«ãä»ããŠå®è¡ã§ããå¿ èŠããããŸãã ããã¯ãwe_advise_you_not_to_do_this_in_production-kindaã®æ¹æ³ã§å¯èœã«ãªãã¯ãã§ããããŸã æ¹æ³ãèŠã€ãããŸããã
ããã¯ç§ã®ã¢ããªã±ãŒã·ã§ã³atmã«ãšã£ãŠéèŠã§ã¯ãªãïŒããããéããç»é²ããã®ã¯ç§ã ãã§ãïŒãangular-2ãå€ãã£ãçŽ æŽããããã¬ãŒã ã¯ãŒã¯ã«ãšãŠãæºè¶³ããŠããŸã:-)ã
@eliasre ...ãããŠãçŽç²ãªHTMLãäœããã®æ¹æ³ã§è§£æãããå®éã®http://angular.ioãµã€ããšåãååã䜿çšããããšããŠããŸãã ããã»ã¹äžã«ãæ¢ç¥ã®ã³ã³ããŒãã³ãã®ãã£ã¯ã·ã§ããªãã«ãã¯ã¢ããããããããã®å Žæã§Angularãã€ãã£ãã³ã³ããŒãã³ããåçã«ã€ã³ã¹ã¿ã³ã¹åãããŸãã ã ããããªãã¯ãããã®ã©ãã§ã䜿ãããšãã§ããŸã...ãããã®ãã¹ãŠã®å éšæ©èœãªã©ã§...
@ mlc-ç§ãæ¢ããŠãããã®ãšãŸã£ããåãããã«èŠããmlapisïŒ ç§ã¯ãããã¹ã¿ãã¯ãªãŒããŒãããŒã§ã¯ãªãããšãç¥ã£ãŠããŸãããããã䜿çšããæ¹æ³ã«é¢ããããã€ãã®ããã¥ã¡ã³ãã®æ¹åãæããŠããã ããŸããïŒ
Angular2ã«ã€ããŠæ¯æ¥æ°ããããšãåŠãã§ãããããªæ°ãããŸãã éåžžãç§ãåŠãã ããšã¯ãããŒããŒãã¢ãŒã¬ã€ãã®æåã®50ããŒãžã«ææžåãããŠããããã§ããïŒP
@eliasreããããã¢ã§ãhttps://stackblitz.com/edit/angular-dynamic-content-viewer?file=app%2Fdynamic-content-viewer.ts
@ToxicableãããŒããã£ãããã§ã
<component1 smth="smth">
<component2>item 1</component2>
<component2>item 2</component2>
<component3 smth="smth">
<component4>smth</component4>
</component3>
</component1>
ãããŠçŸåšãå®è¡æã«ãããã³ã³ãã€ã«ããããã«JiTïŒã»ãšãã©ã®ã³ãŒãã§aotã䜿çšïŒã䜿çšããããšãäœåãªããããŠããŸã
@artaommahe ... component1
çŽæ¥äœ¿çšããããšã¯ã§ããŸãã...ãããã^^^ã®ãããªãã³ãã¬ãŒãã§ã©ãããŒã䜿çšããå Žå...ããããç§ã¯ãŸã è©ŠããããšããããŸããã
ãããã次ã®ãããªãã³ãã¬ãŒãã§ã©ãããŒã䜿çšããå Žå
ãã®ããã¯ã¢ããã¯ããã¯ãšã³ãããæ¥ããŸã§äžæã§ãäœçŸãã®ããªãšãŒã·ã§ã³ããããŸã
@artaommahe ...ããããªãã»ã©ã ããããããã§ã解æãšåçã³ã³ããŒãã³ãã®ã€ã³ã¹ã¿ã³ã¹åã䜿çšãããšãã±ãŒã¹ã管çããããšãå¯èœã§ã^^^ ...å¥ã®æ¹æ³ã§éæ¥çãªã³ã³ãã³ããããžã§ã¯ã·ã§ã³ãäœæããã ãã§ã...ç¬èªã®ã³ãŒããä»ããŠ...
@ Toxicable ã @ artaommahe ïŒã... stackblitz ...ããã¢ã«é¢é£ããŠããŸãã ããã¯å€ããã®ã§ãããå®éã®ããžãã¹ã¢ããªã±ãŒã·ã§ã³ã«ã¯äœ¿çšã§ããŸããã éåžžã®htmlã ããæ¿å ¥ããã«ã¯ã³ãŒããšãªãŒããŒããããå€ãããŸãã åçã³ã³ããŒãã³ãããŒããŒãœãªã¥ãŒã·ã§ã³ã«ã€ããŠãåãã§ãã ããã«ãããŒã¿ãã€ã³ãã£ã³ã°ãªãã§HTMLãæ¿å ¥ããããšã¯ãç§ãã¡ãæ¥åžžç掻ã§æ±ã£ãŠãããŠãŒã¹ã±ãŒã¹ã§ã¯ãããŸããã
çŸåšã®ãšããïŒã³ã³ããŒãã³ãã®ã¬ã€ã¢ãŠãïŒHTMLïŒãè§åºŠ2ã4ã§ãªã³ã¶ãã©ã€ã§ããŒãããããã®ãœãªã¥ãŒã·ã§ã³ã¯ãããŸããã
@KarlXOLç³ãèš³ãããŸãããããã®ãã¢ãã©ã®ããã«æ©èœãããã«ã€ããŠããã€ã誀解ããŠããå¿ èŠããããŸãã
ããã¯å€ããã®ã§ã
äœãå€ããã®ãæªãããã®ã§ããïŒ
éåžžã®HTMLã ããæ¿å ¥ããã«ã¯ã³ãŒããšãªãŒããŒããããå€ãããŸã
äžåºŠã ãå®è£ ããŠãããéåžžã©ããHTMLã ããå®è£ ããŸãããªãŒããŒãããããªãããããããäœãæå³ããã®ãããããŸããã ããªãã®ããã«ãããè¡ãnpmããã±ãŒãžããããŸã
å®éã®ããžãã¹ã¢ããªã±ãŒã·ã§ã³
ããangular.ioã¯ããã䜿çšããŠããã®ã§ãã©ããããã®æ å ±ãå ¥æããã®ãããããŸããã
ããŒã¿ãã€ã³ãã£ã³ã°ãªãã§HTMLãæ¿å ¥ãã
ããŒã¿ãã€ã³ãã£ã³ã°ã¯ããã§æ©èœããŸã
çŸåšã®ãšããïŒã³ã³ããŒãã³ãã®ã¬ã€ã¢ãŠãïŒHTMLïŒãè§åºŠ2ã4ã§ãªã³ã¶ãã©ã€ã§ããŒãããããã®ãœãªã¥ãŒã·ã§ã³ã¯ãããŸããã
ã¯ããããŸã
@Toxicable ïŒããããããŒã¿ãã€ã³ãã£ã³ã°ã§ã¯æ©èœããŸããã ãã³ãã¬ãŒãã®{{myvar}}ã§ãã¢ãæŽæ°ãããããã©ã®ããã«æ©èœããããèŠããŠãã ããã åãã£ãŠæè¬ããŸã
@KarlXOLã¯ãHTMLã«çŽæ¥è£éããããšã¯ã§ããŸãããããã¯ããã¢ã®ãã€ã³ãã§ã¯ãªãhtmlãã³ã³ãã€ã«ããªããšæ©èœããŸãããã³ã³ããŒãã³ãã«ããŒã¿ãã€ã³ãã§ããŸãã éèŠãªã®ã¯ãã³ã³ããŒãã³ããåå©çšããããšã§ãåçãªã¬ã€ã¢ãŠããäœæããã³ã³ããŒãã³ãã奜ããªããã«åå©çšã§ããããšã瀺ãããšã§ããåã³ã³ãã€ã«ããå¿
èŠã¯ãããŸããã
ããªããæ±ããŠããã®ã¯ãåçã«ã³ã³ãã€ã«ããããã³ãã¬ãŒãã§ããããã®ã³ã³ããã¹ãã§ã¯æå³ããããŸãã
@Toxicableãªã®ã§ãçŸåšãJiTã䜿çšããŠå®è¡æã«ã³ã³ãã³ããããžã§ã¯ã·ã§ã³ã䜿çšããŠããŒã¯ã¢ãããã³ã³ãã€ã«ãã以å€ã«ãç§ã®å Žåã¯æ¹æ³ããããŸãããïŒ ïŒããªã³ã³ãã€ã«ããããã«ãã€ã§ãå€æŽã§ããäœçŸãã®ã©ã³ãã ãªmakrupãäœæããæ¹æ³ãããããŸããïŒ
@Toxicableãã¢ãç·šéããŠããã®å€ãtestname
ãšããååã®å€æ°ã«ãã€ã³ãããããã¹ããã£ãŒã«ããå«ãã my-component
ã³ã³ããŒãã³ãã§testname
å€ã䜿çšã§ããããã«ããŠãã ããã name
ãã©ã¡ãŒã¿ãŒå€ãšããŠã®testname
ããã¹ããã£ãŒã«ãã®å€ãæŽæ°ããããã³ã«ãã©ã¡ãŒã¿ãŒãæŽæ°ããå¿
èŠããããŸãã
ç§ã¯äœåãã®ç°ãªãã¢ãããŒããè©ŠããŸãããããããæ©èœãããããšãã§ããŸããã HTMLã§{{myvar}}
ãçŽæ¥ååŸã§ããªãå Žåã¯ã <display-value [value]="bind_to_var_name_x_or_y" />
ãšããã³ã³ããŒãã³ããå¿
èŠã§ãã ããã¯å¯èœã§ããïŒ
@swftvsn ...ã³ã³ããŒãã³ãã®æ°ããã€ã³ã¹ã¿ã³ã¹ãäœæãããšããã®åç
§ãååŸããŸã...ããšãã°_cmpRef
ã 次ã«ã _cmpRef.instance
ãä»ããŠããã®ã³ã³ããŒãã³ãã®@Input()
ãš@Output
ã«ã¢ã¯ã»ã¹ã§ããŸã...ïŒ @Input() myprop: string;
ãš@Output() messages: EventEmitter<string> = new EventEmitter<string>();
ïŒïŒ
this._cmpRef.instance.myprop = 'xxx';
ãŸã
this._cmpRef.instance.messages.subscribe(this.messageSubscription);
...
messageSubscription = (_message: string) => {
...
}
HTMLãªããžã§ã¯ãã®åçããŒãã¯Angular2ã®åºæ¬çãªæ©èœã§ããã¯ãã§ãããæ®å¿µãªãããããã©ãŒãã³ã¹ã®åç®ã§ãããã¯å©çšã§ããŸããã å°æ¥ããã®æ©èœã¯æ¥ããã©ããïŒ
@Toxicableãã¢ãããããšããHTMLãªããžã§ã¯ããžã®åçã€ãã³ããã€ã³ãã£ã³ã°ãæ©èœããŠããŸããïŒäŸïŒKeyPressãå ¥åãªããžã§ã¯ããžã®ngOnChangesïŒ
å ¥åããŠããã@ mlc-mlapisã«æè¬ããŸãïŒ
ç§ã¯ä»ã1æ¥ã®å¯èœæ§ãæ¢æ±ããŸãããç§ãããå¿ èŠãããããšã¯ãããããåçã³ã³ããŒãã³ãã䜿çšããŠå®è¡ã§ããŸãã
ãããã®ç©Žãè¿œããããŠãããšãã«ç§ãèãã2ã€ã®ããšïŒ
ã³ãã¥ããã£ã¯ãã®çŽ æŽããããã¬ãŒã ã¯ãŒã¯ã䜿çšããããšã«ãã£ãŠå°ç¡ãã«ãããŠããã®ã§ãç§ãã¡ã¯ãã¹ãŠãç°¡åã§çŽ æµã§ãããšæåŸ ããåŸåããããŸã;ïŒ
@swftvsn ...ãããã¯https://angular.io/guide/dynamic-component-loaderã«é¢ããå ¬åŒããã¥ã¡ã³ãããã
ãã ãã1ã€ã®è³ªåã§ããå£ã²ãã®ãã³ãã¬ãŒããã©ã€ãã«ããå¿ èŠãããã次ã®ãããªãã®ãååŸããŠããããã§ãã
<table>
{{#each rows}}
<tr>
<td>{{someprop}}</td>
</tr>
{{/#each}}
</table>
ãã®ãã«ãŒãããã¹ãããå Žåã§ããåçã³ã³ããŒãã³ãã®éšåã¯ãã§ã«è§£æ±ºããŸãããã{{}}ã®ãã®ãã³ã³ããŒãã³ãã§çœ®ãæããŠãããããããã解決ããããã®é©åãªã¢ãããŒããèŠã€ããããšãã§ããªãããã§ãããã³ã³ããŒãã³ãã¯ãå®éã«ããŒãã«ãæ··ä¹±ããããããããèªäœã®çè·¡ãæ®ããŠã¯ãªããŸããã replace = trueãæ©èœããªããªã£ãã®ã§ãããã«å°ãå°æããŠããŸãã ãã£ã¬ã¯ãã£ãã¯ãæ·»ä»ãããã®ããªããããæ©èœããŸããã
äœãæ¡ã¯ïŒ
@ mlc-mlapisç§ã¯å®éãå ¬åŒããã¥ã¡ã³ãã¯åçŽãªã±ãŒã¹ã«å¯Ÿå¿ããŠãããšæããŸãããé£ããéšåã¯æªåçã®ãŸãŸã§ãã mustachioãã³ãã¬ãŒããŸãã¯ä»ã®ãµãŒãããŒãã£ãçæããhtmlããã€ãžã§ã¹ããããã®äžéšãã©ã€ãã®Angularã³ã³ããŒãã³ãã«çœ®ãæãããããªãã®ã§ãã
ã¹ããŒããäžçªã§ãæ®ãã¯ããã«ç¶ãããšããããŠAngularã®AOTã®æ§è³ªãå€ãã®ããšãé£ããããŠããããšãç§ã¯ç解ããŠããŸãã ç§ã«èšãããã°è¯ãéžæã§ãããå®ç§ãªäžçã§ã¯ãéçºè ãé©åãšèããå Žæã§JITãAOTãšïŒç°¡åã«ïŒäžŠã¹ãããšãã§ããŸãã
@swftvsn ...ãããã®å Žåã attribute component
ã¯ã <tr mycolumns></tr>
ããã«éåžžã«é©ããŠããŸããããã§ã mycolumns
ã¯ããã³ãã¬ãŒãïŒåçšïŒãŸãã¯åããã¿ãŒã³ãé©çšããéåžžã®ã³ã³ããŒãã³ãã§ãã <td mycolumn></td>
...ãã ããåçã³ã³ããŒãã³ãã§ã¯ãããŒãã«æ§é å
ã§èš±å¯ãããŠããªããã¬ãŒã¹...ãã¹ããããèŠçŽ ãåžžã«äœæãããããããã䜿çšã§ããªãæŠå¿µã§ãã
ç§ã¯ããããªãããç§ã¯å¯äžã®ãã£ã³ã¹ã¯ãåãããã«ãä»»æã®ãµãã³ã³ããŒãã³ããå«ãããšãã§ããåçã³ã³ããŒãã³ããšããŠãããŒãã«å
šäœãã©ãããããšæã<tr mycolumns></tr>
䜿çšããŠç¹°ãè¿ã*ngFor
...
ããã§ãåçãã³ãã¬ãŒããå¿ èŠã§ãã ç§ã®ã¢ããªã±ãŒã·ã§ã³ã¯æ°æ¥ã«1åèµ·åããã®ã§ãèµ·åããã©ãŒãã³ã¹ã¯ãŸã£ããæ°ã«ããŸããã
åçãã³ãã¬ãŒãã¯ãã¢ããªã±ãŒã·ã§ã³ã¢ãŒããã¯ãã£ã«æ¡åŒµæ§ã¬ã€ã€ãŒãè¿œå ããŸãã
åºæ¬çã«ã¯ããã®ãããªæ¡åŒµæ§ã«ããã倱ãããæè»æ§ãåãæ»ãããšãã§ãããšããèãæ¹ã§ãã SPA以åã®æ代ã«ã¯ãïŒWebéçºè ã®ããã«ïŒããã¯ãšã³ãæè¡ã䜿çšããŠããã¹ãŠã®äŸåæ§æ³šå ¥ãšåçã¯ã©ã¹èªã¿èŸŒã¿/åçã¢ã»ã³ããªèªã¿èŸŒã¿ã䜿çšããŠãã¢ããªã±ãŒã·ã§ã³ãããã¹ãŠããã©ã°ã€ã³ãã®æŠå¿µã§ç·šæããŠããŸããã ããã³ããšã³ãã¯ãã®äžéšã«ãããã泚æãåŠçããã³ãŒãã®äžéšãåçã«ããŒããããšãã³ãŒãã®ãã®éšåã¯ãã®æ©èœã®ããã®Webããã³ããšã³ããæäŸããŸãã
SPAã䜿çšãããšããã¹ã¯ãããã®ãããªããã©ãŒãã³ã¹ãšæ觊ãåŸãããŸãããããã®æè»æ§ã¯å€±ãããŸããã
åçãã³ãã¬ãŒãã䜿çšããããšã¯ããã®ãããªæ©èœã«ãšã£ãŠæãéèŠã§ãã ãã©ãŠã¶ãã©ãããã©ãŒã ã«ã¯ãããã«å¿ èŠãªãã¹ãŠã®æè»æ§ãšãAOTïŒéèŠã§ããä»ã®äººã«ãšã£ãŠã¯éèŠã§ãïŒã®ãããªéåžžã«æ®å¿µãªæ©èœããããè§åºŠãäžèªç±ã«ãªãå¯èœæ§ããããŸãã
Angularã¯æ°é±é以å ã«AngularElementsããªãªãŒã¹ããäºå®ã§ããããã®åé¡ã解決ãããããšãé¡ã£ãŠããŸãã Angular Elemetnsã«ã€ããŠã¯ã以äžã®ãªã³ã¯ã確èªããŠãã ããã
https://docs.google.com/presentation/d/1jiXHYwfe1iSUiVLdKLFhSPRHLI_FmIvrI60QTpP6KLk/edit#slide = id.g26d86d3325_0_0
Angularã¯æ°é±é以å ã«AngularElementsããªãªãŒã¹ããäºå®ã§ããããã®åé¡ã解決ãããããšãé¡ã£ãŠããŸãã Angular Elemetnsã«ã€ããŠã¯ã以äžã®ãªã³ã¯ã確èªããŠãã ããã
ããããããã¯ã©ã³ãã ãªãã³ãã¬ãŒãã®ã¢ã»ã³ãã«/ã³ã³ãã€ã«ã«ã¯äœããããŸãããåçUIããããããã¯ãšã³ãããã®ã©ã³ãã ãªããŒã¯ã¢ãããããã®UIãã¢ã»ã³ãã«ããå¿ èŠãããå Žåãããã¯ã©ã®ããã«ãã®ã±ãŒã¹ã解決ããŸããïŒ äºåã«ã³ã³ãã€ã«ããããã³ã³ããŒãã³ããšããŠäœæãããããããšã¯ã§ãããé »ç¹ã«å€æŽãããŸã
ãã®æ©èœã¯2018幎ã®ããŒããããã«ãããŸããTwitterã§BradGreenïŒ@bradlygreenïŒããè¿ä¿¡ããããŸããã :)
@nsksaisaravanaãã€ãŒããžã®ãªã³ã¯ãå ±æã§ããŸããïŒ
@ asadmalik3以äžã®ã¹ã¯ãªãŒã³ã·ã§ããã確èªãããã httpsïŒ //twitter.com/bradlygreenãåç §ããŠãStackOverflowãAngularã®äººæ°ãã€ãŒãã³ã¡ã³ãã®åçãªå¢å ãå ±åããŠããããšã確èªããŠãã ããã
@nsksaisaravana @ asadmalik3ãã®æ©èœïŒã³ã³ããŒãã³ãã®ãã³ãã¬ãŒããåçã«ããŒãããïŒã¯2018幎ã®ããŒããããã«ãããŸããïŒ ãããèšåãããŠãã2018幎ã®ããŒãããããžã®ãªã³ã¯ã¯ãããŸããïŒ
@sunilpes ...ããããçŸåšå©çšå¯èœã§ã... Angularã³ã³ãã€ã©ãŒã䜿çšããã ãã§ããã®ã§ãAOTã¢ãŒãïŒéåžžã¯
ãããèªãã§ãã ããïŒ //github.com/angular/angular/issues/20875
@ mlc-mlapisïŒ20875ã®åé¡ãçµéšããŸããã compiler
ã¢ãžã¥ãŒã«ã䜿çšããŠãªã³ã¶ãã©ã€ïŒã©ã³ã¿ã€ã ïŒã§ã¢ãžã¥ãŒã«ãããŒãããŠã¿ãŸããããã¡ãœããcompileModuleAndAllComponentsSync
ãæ©èœããŸãã ããããããã§ã®ç§ã®è³ªåã¯æ¬¡ã®ãšããã§ãã
compiler
ã¢ãžã¥ãŒã«ã¯AngularïŒäœã¬ãã«APIïŒã®å
éšã«ãããŸãã ä»åŸã®ã¡ãžã£ãŒããŒãžã§ã³ã§ãæåŸ
ã©ããã«æ©èœããŸããïŒ
ãã®ã¢ãžã¥ãŒã«ïŒã³ã³ãã€ã©ïŒã«åºã¥ããŠããŒã«ãæ§ç¯ããåçã¢ãžã¥ãŒã«ããªã³ã¶ãã©ã€ã§ããŒãããããšããŠããŸãã
@sunilpes ...ããããçŸåšå©çšå¯èœã§ã... Angularã³ã³ãã€ã©ãŒã䜿çšããã ãã§ããã®ã§ãAOTã¢ãŒãïŒéåžžã¯
ãã®ãã䜿çšã§ããŸããhttps://github.com/angular/angular/issues/19902倧ããªãã³ãã¬ãŒãã§ã¯éåžžã«é ã
@sunilpes ...ããŒãããããåé¡ã§ãã å®éãããŒãžã§ã³6ã§ã¯5ãšåãããã«äœ¿çšã§ãããšæããŸããéäžã§æ°ãããã¥ãŒãšã³ãžã³ããããŸã....ã³ãŒãããŒã ivy
...ããã¯æ¬åœã«èå³æ·±ãæ°ããå¯èœæ§ãéããŸã...ãããããã¯ããŒãžã§ã³7ã«ã€ããŠã§ã...ãããŸã§ã®ãšãããå
·äœçãªããšã¯äœãèšããŸããã ð
AngularIvyã¬ã³ãã©ãŒã®ãã¬ãã¥ãŒ-Angularã®æ°ãããã¥ãŒãšã³ãžã³!!!
ãã®æ©èœããã€å©çšå¯èœã«ãªããã«ã€ããŠã®æŽæ°ã¯ãããŸããïŒ
@scottseeker ...çŸåšã®å¯èœæ§ãååã§ãªãå Žåã¯ãã¢ã€ããŒãåŸ ã€å¿ èŠããããŸãã
@ mlc-mlapisãã®æ©èœãåŸ ã£ãŠããŸãã ãã®æ©èœã¯ãã©ã³ã¿ã€ã ãã©ã¬ãã«ã¢ãžã¥ãŒã«ãéçºãã倧ããªå¯èœæ§ãç§ããŠããŸãã ãããã©ããªããèŠãŠã¿ãŸããã...
@sunilpes ...
https://is-angular-ivy-ready.firebaseapp.com/#/status
ãŸã ...
@KarlXOLããã§ãæå³ãããå Žåã¯ãtemplateUrl = yourNewHTML ...ã䜿çšããŠv2Componentãäœæããv1Componentãæ¡åŒµããŸãã
@KarlXOLããã§ãæå³ãããå Žåã¯ãtemplateUrl = yourNewHTML ...ã䜿çšããŠv2Componentãäœæããv1Componentãæ¡åŒµããŸãã
ããŒã¯ã¢ãããããã¯ãšã³ãïŒããŸããŸãªæŒç¿ãå«ãã¬ãã¹ã³ã³ã³ãã³ããªã©ïŒããã®ãã®ã§ãããåå¥ã®ç®¡çããã·ã¥ããŒããä»ããŠå€æŽãããå Žåãå€ããããŸãã
ç§ããã®æ©èœã倧奜ãã§ãã
å®è¡æã«ã³ã³ããŒãã³ããangular-htmlããå€æŽã§ããããã«ããããã
@mastronardif +1
ã«ã¹ã¿ã ãã©ãŒã ã衚瀺ããããã«ãµãŒããŒããæäŸãããã¢ãŒããã¬ãŒã·ã§ã³ãã³ãã¬ãŒããã¬ã³ããªã³ã°ããå¿ èŠãããã¿ã¹ã¯ããããŸããã ãã³ãã¬ãŒãã§ãã€ã³ãã£ã³ã°ãæå¹ã«ããã«ã¯ãå®è¡æã«ã³ã³ããŒãã³ããäœæããŠã³ã³ãã€ã«ããå¿ èŠããããŸããã
ãããéæããããã®ã¹ãããïŒ
import {AfterViewInit, Compiler, CompilerFactory, Component, NgModule, ViewChild, ViewContainerRef} from '@angular/core';
import {CommonModule} from '@angular/common';
import {JitCompilerFactory} from '@angular/platform-browser-dynamic';
@Component({
selector: 'app-parent',
template: '<div #container></div>'
})
class ParentComponent implements AfterViewInit {
@ViewChild('container', {read: ViewContainerRef}) container: ViewContainerRef;
constructor(private compiler: Compiler) {}
ngAfterViewInit() {
// Must clear cache.
this.compiler.clearCache();
// Define the component using Component decorator.
const component = Component({
template: '<div>This is the dynamic template</div>',
styles: [':host {color: red}']
})(class {});
// Define the module using NgModule decorator.
const module = NgModule({
declarations: [component]
})(class {});
// Asynchronously (recommended) compile the module and the component.
this.compiler.compileModuleAndAllComponentsAsync(module)
.then(factories => {
// Get the component factory.
const componentFactory = factories.componentFactories[0];
// Create the component and add to the view.
const componentRef = this.container.createComponent(componentFactory);
});
}
}
èŠããŠããã¹ãããã€ãã®äºæïŒ
export function createCompiler(compilerFactory: CompilerFactory) {
return compilerFactory.createCompiler();
}
@NgModule({
imports: [
CommonModule
],
exports: [],
providers: [
// Compiler is not included in AOT-compiled bundle.
// Must explicitly provide compiler to be able to compile templates at runtime.
{provide: COMPILER_OPTIONS, useValue: {}, multi: true},
{provide: CompilerFactory, useClass: JitCompilerFactory, deps: [COMPILER_OPTIONS]},
{provide: Compiler, useFactory: createCompiler, deps: [CompilerFactory]} ],
declarations: []
})
export class CoreModule {}
@ alert9k ...ã³ã¢ã¢ããªãšçµã¿åããããã®æ¹æ³ã¯éããŠããŠæ©èœããŸã... Ivyã§ã©ã®ãããªåçãªãã®ãéããããã確èªããŸã...åªããããã©ãŒãã³ã¹ã§ãã
@ alert9kç§ã¯éåžžã«ãã䌌ãèŠä»¶ãæã£ãŠãããæšå¹Žåãã¢ãããŒããè©ŠããŸããããæ©èœãããããšãã§ããŸããã§ããã ç§ãèŠéããŠããã®ã¯ãã¢ãžã¥ãŒã«ã®å€æŽã ã£ããšæããŸãã ã ããç§ã¯ãããæ¬åœã«çŽ æ©ãè©ŠããŠããŸãããããŠããªãã®ã³ãŒãã¹ããããããç§ãç解ã§ããªãå¯äžã®ããšã¯ãã®ãcreateQuestionFunctionãé¢æ°ãã©ãããæ¥ãŠãããã§ãïŒ
const componentFactory = this.createQuestionContent(factories.componentFactories[0]);
@BKHinesæ°ã¥ããŠãããŠããããšãã ãããã¢ããªããç¡è¬ã«ã³ããŒããŠè²Œãä»ããŸããã ä¿®çæžã¿ã
@ alert9kã¯ã¯ã¯ãããã¯ç§ãäžæçã«èšå®ãããã®ã§ãã ç§ã¯ãããå®è¡ããŸããã§ããã å®è¡ããã ãã§åäœããã®ãèŠãŠããã ããïŒ çŽ æŽãããã¹ã¿ãããã³ïŒ ããããšãïŒ
@ alarm9kããã¯æ¬åœã«é¢çœãã§ãã ããããšãããããŸããïŒ ã³ã³ãã€ã©ããã³ãã«ããããªãŒã·ã§ã€ã¯ããªãããšã®ã³ã¹ãã«é¢ããçµ±èšã¯ãããŸããïŒ
å·®ã¯329kBã§ãã
å·®ã¯329kBã§ãã
ããªãã¯gzipãéãã
@ alarm9kãã®ããã«äœæãããã³ã³ããŒãã³ãã«ãµãŒãã¹ã泚å
¥ããããšã¯å¯èœã§ããïŒ ã³ã³ããŒãã³ãã³ã³ã¹ãã©ã¯ã¿ãŒã«ChangeDetectorRef
ãšElementRef
ãæ¿å
¥ããããšãããšã Can't resolve all parameters for ComponentClass: (?, ?).
ãããã§
è¯ãäžæ¥ïŒ ãŸããå€éšããŒã¿ãœãŒã¹ããçŸåšã®ã³ã³ããŒãã³ãã®ãã³ãã¬ãŒãã眮ãæããå¿ èŠæ§ã«çŽé¢ããŸããã ãã¡ãããçŸåšãã³ã³ããŒãã³ããåçã«äœæããçŸåšã®ããžãã¯ãã³ã³ããŒãã³ãã«è»¢éããããšã§ããã®åé¡ã解決ããããšããŠããŸãã ãããããã¿ãŒã³ãæ£ç¢ºã«å€æŽã§ããã®ã¯çŽ æŽãããããšã§ãã ç§ã¯ãã®æ©èœãæ¬åœã«æ¥œãã¿ã«ããŠããŸãã ãã®æ©èœã®åºçŸã®ã¿ã€ãã³ã°ã®ããããã®è©äŸ¡ããé¡ãããŸãã NSã
@ alert9k ng build --prod
ãé€ããŠãããã¯éåžžã«ããŸãæ©èœããŸãã ãšã©ãŒã¯ãããŸããããWebãµã€ããããŒããããšãã³ã³ãœãŒã«ã«æ¬¡ã®ããã«è¡šç€ºãããŸãã
ãšã©ãŒãšã©ãŒïŒãã©ã³ã¿ã€ã ã³ã³ãã€ã©ãããŒããããŠããŸããã
Ni /main.f449713c3fb3867ad6bf.js:1:68849
compileModuleAndAllComponentsAsync
/main.f449713c3fb3867ad6bf.js:1:69182
ngAfterViewInit
/ 6.c40d8b2dc5100b1af302.js
Xs /main.f449713c3fb3867ad6bf.js:1:126416
Qs /main.f449713c3fb3867ad6bf.js:1:126176
Zs
@SamuelMarksããã¯ãã¢ãžã¥ãŒã«ã§ã³ã³ãã€ã©ãŒãæäŸããŠããªãããšãåå ã§ããå¯èœæ§ããããŸãã
ã©ãã«å«ããå¿ èŠããããŸããïŒ
芪@NgModule
ã®imports: []
ãæå³ããŸããïŒ -ã©ã®ã¢ãžã¥ãŒã«ã§ããïŒ
@SamuelMarksãã®ã³ãŒããã¢ãžã¥ãŒã«ã«å«ããŸãããïŒ æ°ãæåã«ãããæ©èœãããããšãã§ããªãã£ããšãã«åæ§ã®ãšã©ãŒãçºçãã @ alarm9kã®äŸãŸã§ãã³ã³ãã€ã©ãå®è¡æã«ãªãããšãããããŸããïŒãšã©ãŒã«æãããªã¡ãã»ãŒãžã衚瀺ãããŠããã«ããããããïŒlolïŒ
export function createCompiler(compilerFactory: CompilerFactory) {
return compilerFactory.createCompiler();
}
@SamuelMarksã¢ãžã¥ãŒã«ã®providersé åã«ã³ã³ãã€ã©ãå«ããå¿ èŠããããŸãã äžèšã®ç§ã®ã³ãŒãäŸãã芧ãã ããã
Angularã®äžçã§ã¯ããæäŸããããšã¯ãã¢ãžã¥ãŒã«ã®ãããã€ããŒã«äœããè¿œå ããããšãæå³ããŸãã
芪ã³ã³ããŒãã³ãããåçã³ã³ããŒãã³ãã®å€æŽããã£ããã£ããããã®ãã³ãã¯ãããŸããïŒ ããããã£Aãæã€ã³ã³ããŒãã³ãAããããŸãã ã³ã³ããŒãã³ãAã¯ãHTTPåŒã³åºãããè¿ãããHTMLã®æååããåçã³ã³ããŒãã³ãã³ã³ããŒãã³ãBãäœæããŸãã ã³ã³ããŒãã³ãBã®å éšã«ã¯ããããžã§ã¯ãå ã§ç¢ºç«ãããã³ã³ããŒãã³ãã§ããã³ã³ããŒãã³ãCã®æããããŸãã ã³ã³ããŒãã³ãCã®å ¥åããããã£ã®1ã€ã¯ããããã£Aã§ããPropertyAã®å€ãComponentBã®ã€ã³ã¹ã¿ã³ã¹ã«é 眮ããããšã§ãã³ã³ããŒãã³ãCã«æž¡ãããšãã§ããŸãã
componentB.instance.propertya = this.propertya;
次ã«ãã³ã³ããŒãã³ãCã¯åæåæã«æ£ããå€ã瀺ããŸãã ãã ããã³ã³ããŒãã³ãAã®ããããã£Aãå€æŽãããšãã³ã³ããŒãã³ãCã«ã¯åæ ãããŸãããããããã£Aãå ±éã®ãµãŒãã¹ã«ç§»åããŸããããæ£åžžã«æ©èœããŸãïŒãã®ããããããç¶æã§ããŸãïŒãåçã³ã³ããŒãã³ããšåçã³ã³ããŒãã³ãã®ã³ã³ããŒãã³ãã§ãã®ããããã£ãå€æŽã§ããŸããïŒ å ¥åºåå€æ°ãäœæããŠåºåã€ãã³ãããµãã¹ã¯ã©ã€ãããããšããŸãããããã€ã¹ããããŸããã§ããã ãŸãããã¿ã³ãã¯ãªãã¯ããŠããããã£Aãå€æŽããå Žåãã以äžã§è©ŠããŠã¿ãŸãããåãçµæã§ãã
componentB.changeDetectionRef.detectChanges();
æå³ããªãå Žåã®ç°¡åãªGitHubãªããžããªã¯æ¬¡ã®ãšããã§ãïŒ https ïŒ
@ alert9k @BKHinesããããšããã»ãšãã©æ©èœããŸããïŒ
UncaughtïŒin promiseïŒïŒãšã©ãŒïŒãã£ã³ã¯root-root-moduleã®ããŒãã«å€±æããŸããã
import { Compiler, CompilerFactory, NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { RouterModule } from '@angular/router';
import { ThisComponent } from './this.component';
import { theseRoutes } from './these.routes';
export function createCompiler(compilerFactory: CompilerFactory): Compiler {
return compilerFactory.createCompiler();
}
@NgModule({
declarations: [ThisComponent],
imports: [
CommonModule, RouterModule, RouterModule.forChild(theseRoutes)
],
providers: [{ provide: Compiler, useFactory: createCompiler, deps: [CompilerFactory] }]
})
export class ThisModule {}
@ alert9kã«ãã£ãŠæäŸãããäžèšã®äŸã¯ãIvyã䜿çšããŠããå Žåã
次ã®ãšã©ãŒãçºçããŸãã
ãšã©ãŒãšã©ãŒïŒãã£ãããããŠããŸããïŒçŽæãããŠããŸãïŒïŒTypeErrorïŒServices.createRootViewã¯é¢æ°ã§ã¯ãããŸãã
TypeErrorïŒServices.createRootViewã¯é¢æ°ã§ã¯ãããŸãã
ComponentFactory_.push ../ node_modules / @ angular / core / __ ivy_ngcc __ / fesm5 / core.js.ComponentFactory_.createïŒcore.jsïŒ18750ïŒ
ViewContainerRef_.createComponentïŒcore.jsïŒ16282ïŒã§
parent.component.tsïŒ35ã§
ZoneDelegate.push ../ node_modules / zone.js / dist / zone.js.ZoneDelegate.invokeïŒzone.jsïŒ391ïŒ
Object.onInvokeïŒcore.jsïŒ24359ïŒã§
ZoneDelegate.push ../ node_modules / zone.js / dist / zone.js.ZoneDelegate.invokeïŒzone.jsïŒ390ïŒ
Zone.push ../ node_modules / zone.js / dist / zone.js.Zone.runïŒzone.jsïŒ150ïŒ
zone.jsïŒ910ã§
ZoneDelegate.push ../ node_modules / zone.js / dist / zone.js.ZoneDelegate.invokeTaskïŒzone.jsïŒ423ïŒ
Object.onInvokeTaskïŒcore.jsïŒ24350ïŒã§
resolvePromiseïŒzone.jsïŒ852ïŒã§
zone.jsïŒ917ã§
ZoneDelegate.push ../ node_modules / zone.js / dist / zone.js.ZoneDelegate.invokeTaskïŒzone.jsïŒ423ïŒ
Object.onInvokeTaskïŒcore.jsïŒ24350ïŒã§
ZoneDelegate.push ../ node_modules / zone.js / dist / zone.js.ZoneDelegate.invokeTaskïŒzone.jsïŒ422ïŒ
Zone.push ../ node_modules / zone.js / dist / zone.js.Zone.runTaskïŒzone.jsïŒ195ïŒ
drainMicroTaskQueueïŒzone.jsïŒ601ïŒã§
@ Igneous01ã©ã®ããŒãžã§ã³ã®Angularã«å¯ŸããŠãã¹ãããŠããŸããïŒ
@ Igneous01 @petebacondarwin enableIvy: true
å Žåãåããšã©ãŒãçºçããŸããã
ãããžã§ã¯ãã¯AngularCLI8.1.3ã§çæãããŸããã
Angular CLI: 8.1.3
Node: 10.15.0
OS: win32 x64
Angular: 8.1.3
... animations, cli, common, compiler, compiler-cli, core, forms
... language-service, platform-browser, platform-browser-dynamic
... router
Package Version
-----------------------------------------------------------
@angular-devkit/architect 0.801.3
@angular-devkit/build-angular 0.801.3
@angular-devkit/build-optimizer 0.801.3
@angular-devkit/build-webpack 0.801.3
@angular-devkit/core 8.1.3
@angular-devkit/schematics 8.1.3
@ngtools/webpack 8.1.3
@schematics/angular 8.1.3
@schematics/update 0.801.3
rxjs 6.4.0
typescript 3.4.5
webpack 4.35.2
ããã±ãŒãžJSONãã¡ã€ã«ïŒ
"dependencies": {
"@angular/animations": "~8.1.1",
"@angular/common": "~8.1.1",
"@angular/compiler": "~8.1.1",
"@angular/core": "~8.1.1",
"@angular/forms": "~8.1.1",
"@angular/platform-browser": "~8.1.1",
"@angular/platform-browser-dynamic": "~8.1.1",
"@angular/router": "~8.1.1",
"bootstrap": "^4.3.1",
"rxjs": "~6.4.0",
"tslib": "^1.9.0",
"zone.js": "~0.9.1"
},
"devDependencies": {
"@angular-devkit/build-angular": "~0.801.1",
"@angular/cli": "~8.1.1",
"@angular/compiler-cli": "~8.1.1",
"@angular/language-service": "~8.1.1",
"@types/node": "~8.9.4",
"@types/jasmine": "~3.3.8",
"@types/jasminewd2": "~2.0.3",
"codelyzer": "^5.0.0",
"jasmine-core": "~3.4.0",
"jasmine-spec-reporter": "~4.2.1",
"karma": "~4.1.0",
"karma-chrome-launcher": "~2.2.0",
"karma-coverage-istanbul-reporter": "~2.0.1",
"karma-jasmine": "~2.0.1",
"karma-jasmine-html-reporter": "^1.4.0",
"protractor": "~5.4.0",
"ts-node": "~7.0.0",
"tslint": "~5.15.0",
"typescript": "~3.4.3"
}
ãšã©ãŒïŒ
ERROR Error: Uncaught (in promise): TypeError: Services.createRootView is not a function
TypeError: Services.createRootView is not a function
at ComponentFactory_.create (core.js:26827)
at dynamic-loader.service.ts:92
at ZoneDelegate.invoke (zone-evergreen.js:359)
at Object.onInvoke (core.js:34209)
at ZoneDelegate.invoke (zone-evergreen.js:358)
at Zone.run (zone-evergreen.js:124)
at zone-evergreen.js:855
at ZoneDelegate.invokeTask (zone-evergreen.js:391)
at Object.onInvokeTask (core.js:34190)
at ZoneDelegate.invokeTask (zone-evergreen.js:390)
at resolvePromise (zone-evergreen.js:797)
at zone-evergreen.js:862
at ZoneDelegate.invokeTask (zone-evergreen.js:391)
at Object.onInvokeTask (core.js:34190)
at ZoneDelegate.invokeTask (zone-evergreen.js:390)
at Zone.runTask (zone-evergreen.js:168)
at drainMicroTaskQueue (zone-evergreen.js:559)
at ZoneTask.invokeTask [as invoke] (zone-evergreen.js:469)
at invokeTask (zone-evergreen.js:1603)
at HTMLButtonElement.globalZoneAwareCallback (zone-evergreen.js:1629)
@ vunb -Angularã®next
ããŒãžã§ã³ã§ã®ã¿IVYããã¹ãããå¿
èŠãããããšã«æ³šæããŠãã ããã äŸïŒ 9.0.0-next.0
ã
ãšã¯ã¹ããŒãé¢æ°createCompilerïŒcompilerFactoryïŒCompilerFactoryïŒ{
ãªã¿ãŒã³compilerFactory.createCompilerïŒïŒ;
}
ã©ããããããšãïŒ
@ alert9k
ãŸã第äžã«ãããªããäžã§è¿°ã¹ãåªãã解決çã«æè¬ããŸãã ãããŸã§ã®ãšãããéåžžã«åœ¹ã«ç«ã¡ãŸããã
ãã®æ¹æ³ã§ã¢ãžã¥ãŒã«/ã³ã³ããŒãã³ããäœæãããšãã«ãè€æ°ã®ã³ã³ããŒãã³ããå®è£ ãããããã®éã§ã«ãŒãã£ã³ã°ããã®ã«å°ãåé¡ããããŸãã ãããå®è£ ããããã®ã¢ããã€ã¹ã¯ãããŸããïŒ
äŸãã°ã
const myModule = NgModule({
imports: [
RouterModule.forChild([
{
path: "",
component: component1,
pathMatch: "full"
},
{
path: "component2",
component: component2,
pathMatch: "full"
}
])
],
declarations: [component1, component2],
exports: [component1, component2]
})(class {});
åäœããŸããã ãã ããã€ã³ããŒããé€å€ãããšãcomponent1ãããã©ã«ãã§ããŒããããããã«ãªããŸãã
åçãã³ãã¬ãŒããå¿ èŠãªå Žåã¯ãäœãåé¡ããããŸãã
@djleonskennedyããã¯ããªããããã¯ã¢ããããããšããããªãã£ããšããã°ããã声æã§ãã ããŸãæ©èœããå¿ èŠããªãå Žåã¯ãåããç¶ããŠãã ããã
ã«ã¹ã¿ã ãã©ãŒã ã衚瀺ããããã«ãµãŒããŒããæäŸãããã¢ãŒããã¬ãŒã·ã§ã³ãã³ãã¬ãŒããã¬ã³ããªã³ã°ããå¿ èŠãããã¿ã¹ã¯ããããŸããã ãã³ãã¬ãŒãã§ãã€ã³ãã£ã³ã°ãæå¹ã«ããã«ã¯ãå®è¡æã«ã³ã³ããŒãã³ããäœæããŠã³ã³ãã€ã«ããå¿ èŠããããŸããã
ãããéæããããã®ã¹ãããïŒ
- ViewContainerRefå ã§åçã«ã³ã³ãã€ã«ãããåã³ã³ããŒãã³ããäœæããã³ã¬ã³ããªã³ã°ãã芪ã³ã³ããŒãã³ããäœæããŸãã
- ã³ã³ãã€ã©ããŒã¯ã³ã䜿çšããŠã³ã³ãã€ã©ãæ¿å ¥ããŸãã
- Componentãã³ã¬ãŒã¿ãšNgModuleãã³ã¬ãŒã¿ïŒå éšã®é¢æ°ïŒã䜿çšããŠãã³ã³ããŒãã³ããšããã宣èšããã¢ãžã¥ãŒã«ãå®çŸ©ããŸãã
- äž¡æ¹ãã³ã³ãã€ã«ããŸãã ããã«ãããã³ã³ããŒãã³ãã€ã³ã¹ã¿ã³ã¹ã®äœæã«äœ¿çšã§ããã³ã³ããŒãã³ããã¡ã¯ããªãæäŸãããŸãã
- ã³ã³ããŒãã³ããã¡ã¯ããªã䜿çšããŠããã¥ãŒã³ã³ããå ã«ã³ã³ããŒãã³ããäœæããŸãã
- ãªãã·ã§ã³ïŒã³ã³ããŒãã³ãå ¥åãããå Žåã¯ãããã«å€ãå²ãåœãŠãŸãã
import {AfterViewInit, Compiler, CompilerFactory, Component, NgModule, ViewChild, ViewContainerRef} from '@angular/core'; import {CommonModule} from '@angular/common'; import {JitCompilerFactory} from '@angular/platform-browser-dynamic'; @Component({ selector: 'app-parent', template: '<div #container></div>' }) class ParentComponent implements AfterViewInit { @ViewChild('container', {read: ViewContainerRef}) container: ViewContainerRef; constructor(private compiler: Compiler) {} ngAfterViewInit() { // Must clear cache. this.compiler.clearCache(); // Define the component using Component decorator. const component = Component({ template: '<div>This is the dynamic template</div>', styles: [':host {color: red}'] })(class {}); // Define the module using NgModule decorator. const module = NgModule({ declarations: [component] })(class {}); // Asynchronously (recommended) compile the module and the component. this.compiler.compileModuleAndAllComponentsAsync(module) .then(factories => { // Get the component factory. const componentFactory = factories.componentFactories[0]; // Create the component and add to the view. const componentRef = this.container.createComponent(componentFactory); }); } }
èŠããŠããã¹ãããã€ãã®äºæïŒ
- ã³ã³ãã€ã©ã§clearCacheãåŒã³åºãããšãå¿ããªãã§ãã ããã ããããªããšãã³ã³ããŒãã³ãã1åããã¬ã³ããªã³ã°ã§ããªããªããŸãã 2åç®ã«ã³ã³ãã€ã«ããããšãããšãAngularã¯2ã€ã®ç°ãªãã¢ãžã¥ãŒã«ã«ååšããåãã³ã³ããŒãã³ãã«ã€ããŠæå¥ãèšããŸãã
- ã³ã³ããŒãã³ããšã¢ãžã¥ãŒã«ã®å®£èšã§å¿åã¯ã©ã¹ã䜿çšããå¿ èŠã¯ãããŸããã ç§ã¯å®éã«ãã¢ããªã±ãŒã·ã§ã³ã«ãã§ã«ããã¯ã©ã¹ã䜿çšããŠã³ã³ããŒãã³ãã宣èšããŸããã
- ã¢ããªãAOTã³ã³ãã€ã©ã§ã³ã³ãã€ã«ãããŠããå Žåãã³ã³ãã€ã©ã¯é垞䜿çšã§ããŸããã ããã解決ããã«ã¯ãã³ã³ãã€ã©ãæ瀺çã«æäŸããå¿ èŠããããŸãã
export function createCompiler(compilerFactory: CompilerFactory) { return compilerFactory.createCompiler(); } @NgModule({ imports: [ CommonModule ], exports: [], providers: [ // Compiler is not included in AOT-compiled bundle. // Must explicitly provide compiler to be able to compile templates at runtime. {provide: COMPILER_OPTIONS, useValue: {}, multi: true}, {provide: CompilerFactory, useClass: JitCompilerFactory, deps: [COMPILER_OPTIONS]}, {provide: Compiler, useFactory: createCompiler, deps: [CompilerFactory]} ], declarations: [] }) export class CoreModule {}
ãã®ãœãªã¥ãŒã·ã§ã³ã«åé¡ãããããµãŒãã¹ãè¿œå ã§ããŸãã
次ã«ãng serve --aotãå®è¡ããŸãããããã®ãšã©ãŒãçºçããŸããã©ã³ã¿ã€ã ã³ã³ããŒãã³ãã«ããŒã¿ãµãŒãã¹ãæ¿å
¥ããã«ã¯ã©ãããã°ããã§ããïŒ
@jalbatross @CharlesElGriegoã¿ããªãããã誰ããå©ããŠãããŠããããã§ãïŒãããŠç³ãèš³ãããŸãããä»ã®äººã«ã¯ããŸããããŸããã§ããïŒã ç§ã調æ»ããŠè§£æ±ºçãèŠã€ãããã®ç¹å®ã®ãããžã§ã¯ãã§ã¯ãéåžžã«çããŠãŒã¹ã±ãŒã¹ããããŸããã ãã®çŽåŸãç§ã¯å¥ã®ãããžã§ã¯ãã«åãæ¿ããŸããïŒç§ã¯è«è² æ¥è ã§ãïŒãAngularã1幎以äžäœ¿çšããŠããŸããïŒæ®å¿µãªãããå®éšãè¡ãããã®30åã¯ãããŸããïŒã æ®å¿µãªããã @ jalbatross ãAngularé¢é£ã®ã¢ããã€ã¹ãæäŸããããšã¯ã§ããŸããã ããããç§ã¯ãç¹å®ã®ããŒã«ã䜿çšããŠäœããè¡ãã®ãéåžžã«é£ããå Žåãééã£ãããŒã«ã䜿çšããŠããå¯èœæ§ãé«ããšããèãã匷ãæ¯æããŠããŸãã å¶ç¶ã«ããå¥ã®ãããžã§ã¯ãã§åæ§ã®ã¿ã¹ã¯ïŒå®è¡æã®ä»»æã®ãã³ãã¬ãŒãã®ã³ã³ãã€ã«ïŒããããŸããããä»åã¯ãã®ãžã§ãã«Angularã䜿çšããããšãé¿ããŸããã 代ããã«ãReact + JSX + Babelã䜿çšããŸããã
import * as Babel from '@babel/standalone';
const compiled = Babel.transform(
'<div>Content</div>',
{presets: ['react']}
).code;
ãã³ãã¬ãŒããã©ãããŠãAngularæ§æã§ããå¿ èŠãããå Žåã¯ãææ¡ã¯ãããŸããã ãã ãããã©ãŒãããã«æè»æ§ãããå Žåã¯ãç§ã«ã¯ããããŸãã...ãã€ã¯ãããã³ããšã³ãã®ã¯ã¬ã€ãžãŒãªã¢ã€ãã¢ãšãAngularã®æµ·ã«Reactã®å°ããªå³¶ïŒpreactïŒïŒãäœæããããšãæ€èšããŠãã ããã
@CharlesElGriegoããªãã®ç»åã¯ç解ããã®ã«ååã§ã¯ãããŸããã æ¬åœã«çå£ã«è©±ãããå Žåã¯ãGithubã§ã§ããã ãåçŽãªè€è£œãããžã§ã¯ããäœæããŠãã ããããã®ãããžã§ã¯ãã¯ã1ã€ã®åé¡ã®ã¿ã«çŠç¹ãåœãŠãã¯ããŒã³ãäœæããŠå®è¡ããããšãã§ããŸãã
@CharlesElGriego
ã§ããããšã¯ãã³ã³ããŒãã³ããäœæããŠããã³ã³ããã¹ããããµãŒãã¹ãæž¡ãããšã§ãã 次ã«ããã®å€æ°ãåçã«äœæãããã³ã³ããŒãã³ãã®ã€ã³ã¹ã¿ã³ã¹ã«å²ãåœãŠãŸãã
// This is from the parent component
constructor(private service1: service1) {
}
ngAfterViewInit() {
// Must clear cache.
this.compiler.clearCache();
// Define the component using Component decorator.
const component = Component({
template: '<div>This is the dynamic template</div>',
styles: [':host {color: red}']
})(class {
// Makes service1 available in the created controller scope
private dynamicAssignedService: service1;
constructor() {
console.log("Got service: ", dynamicAssignedService);
}
});
// Define the module using NgModule decorator.
const module = NgModule({
declarations: [component]
})(class {});
// Services you need here
let sharedService = this.service1;
// Asynchronously (recommended) compile the module and the component.
this.compiler.compileModuleAndAllComponentsAsync(module)
.then(factories => {
// Get the component factory.
const componentFactory = factories.componentFactories[0];
// Create the component and add to the view.
const componentRef = this.container.createComponent(componentFactory);
// Assign the service to the component instance
componentRef.instance.dynamicAssignedService = sharedService;
});
}
}
ããã«ã¡ã¯ïŒ @jalbatrossãš@ alarm9kã«ãååããã ãããããšãããããŸã
ç§ãããªãã®çãã«åºã¥ããŠã¬ããäœæããŸãã
https://github.com/CharlesElGriego/angular-aot-dynamic-components
@CharlesElGriegoããããšãããããŸãã ç§ã¯ããããåã«èšåãã¹ãã§ããããç§ã¯ãã®äºä»¶ã«ã€ããŠå°ãåã«èšäºãæžããŸããã äŸãå«ããªããžããªãžã®ãªã³ã¯ããããŸãã
https://www.linkedin.com/pulse/compiling-angular-templates-runtime-dima-slivin/
@jalbatrossããã@CharlesElGriegoã@ alarm9kã
ããªãã¯ãŸãã䜿çšããããã®è§£æ±ºçãèŠã€ããããã«ç®¡çããªãã£ãtemplateUrl
ã§ã¯ãªãtemplate
ïŒ
Angularã¯ããŒã¯ã¢ãããèªã¿èŸŒããªãããã templateUrl
ã䜿çšããŠå®è¡ããããšã¯ã§ããŸããã ãããããã°ã©ã ã§å®æœããã«ã¯ã©ãããã°ããã§ããïŒ
ERROR Error: Uncaught (in promise): Error: Component 'Foobar' is not resolved:
- templateUrl: ./foobar.component.html
Did you run and wait for 'resolveComponentResources()'?
ã©ããªå©ãã§ã倧æè¿ã§ãïŒ
ã»ãŒ2幎åã«æçš¿ãããã®åé¡ã解決ããããã®çã®æè¯ã®è§£æ±ºçãšãªãAngular9ïŒIvyïŒãåŸ
ã¡ãŸãã
ç§ã®åé¡ã¯ãå®éã«ã¯ãAngular 9ïŒIvyïŒã§ç°¡åã«å®è£
ã§ãããé«æ¬¡ã§åçãªãã³ã³ããŒãã³ãã®ãªã¯ãšã¹ãã§ããããã¯AngularJSã§ãç°¡åã«å®è¡ã§ããŸããã
@knafteNæ£çŽãªãšããããããå¯èœãã©ããã¯çåã§ãã ãã®åå ãšãªã£ãŠããAngularã®ã³ãŒãã¯èª¿ã¹ãŠããŸãããããã³ãã¬ãŒãã®URLã¯ãã«ãæã«è§£æ±ºãããããã»ã¹èªäœã¯ãã³ãã¬ãŒãã®ã³ã³ãã€ã«ãšã¯å¥ã§ãããããã³ã³ãã€ã©ãŒãšã¯é¢ä¿ããªãããã§ãã
å®è¡æã«ãã³ãã¬ãŒããã³ã³ãã€ã«ããããã«ãã³ãã¬ãŒãURLã䜿çšããå¿ èŠãããã®ã¯ã©ã®ãããªãŠãŒã¹ã±ãŒã¹ã§ããïŒ
ã³ã¡ã³ãããããšãããããŸã@KarlXOLãš@ alarm9k
åãã³ã³ããŒãã³ãã«ç°ãªãhtmlãã³ãã¬ãŒãã䜿çšã§ããã¡ã«ããºã ãæ¢ããŠããŸãã çŸæç¹ã§ã¯ãswitchCaseã¹ããŒãã¡ã³ãã§1ã€ã®ãã³ãã¬ãŒãã®ã¿ã䜿çšããŠããŸããããã®ã¢ãããŒãã¯ããªãéããã³ãŒããäžå¿
èŠã«è¥å€§åãããŸãã
ãããå¿
èŠãªã®ã¯ãç¬èªã®ã¹ã¿ã€ã«ã¬ã€ããšããŒããé©çšãããã¯ã©ã€ã¢ã³ãã2人ããããã§ãã ããžãã¯ã¯åããŸãŸã§ãã
ãã®åäœã¯ã httpsïŒ//github.com/NativeScript/NativeScriptã§ãã§ã«ïŒäœããã®æ¹æ³ã§ïŒå®è£
ãããŠãcomponent.html
ãšcomponent.tns.html
ïŒãæã€ããšãã§ããŸãã ãã®tns.htmlãã¡ã€ã«ã¯æ
£äŸã«ããããŒããããŸãããAngularãããžã§ã¯ãã§ãã®åäœãèªåã§äœæããå Žæãšæ¹æ³ãããããŸããã
åç
§ïŒ https ïŒ
ã»ãŒ2幎åã«æçš¿ãããã®åé¡ã解決ããããã®çã®æè¯ã®è§£æ±ºçãšãªãAngular9ïŒIvyïŒãåŸ ã¡ãŸãã
ç§ã®åé¡ã¯ãå®éã«ã¯ãAngular 9ïŒIvyïŒã§ç°¡åã«å®è£ ã§ãããé«æ¬¡ã§åçãªãã³ã³ããŒãã³ãã®ãªã¯ãšã¹ãã§ããããã¯AngularJSã§ãç°¡åã«å®è¡ã§ããŸããã
ããã«ã¡ã¯Angular9ããããã©ã®ããã«åŠçãããã«ã€ããŠã®ããã¥ã¡ã³ãã¯ãããŸããïŒ ããããšã
@jalbatrossããã@CharlesElGriegoã@ alarm9kã
ããªãã¯ãŸãã䜿çšããããã®è§£æ±ºçãèŠã€ããããã«ç®¡çããªãã£ã
templateUrl
ã§ã¯ãªãtemplate
ïŒAngularã¯ããŒã¯ã¢ãããèªã¿èŸŒããªãããã
templateUrl
ã䜿çšããŠå®è¡ããããšã¯ã§ããŸããã ãããããã°ã©ã ã§å®æœããã«ã¯ã©ãããã°ããã§ããïŒERROR Error: Uncaught (in promise): Error: Component 'Foobar' is not resolved: - templateUrl: ./foobar.component.html Did you run and wait for 'resolveComponentResources()'?
ã©ããªå©ãã§ã倧æè¿ã§ãïŒ
ç§ã¯CSSã¹ã¿ã€ã«ã§åãåé¡ãæ±ããŠããŸã
@knafteN @CharlesElGriego @KarlXOLãè¿°ã¹ãããã«ãããã¯HOCã®èŠ³ç¹ïŒé«æ¬¡ã³ã³ããŒãã³ãïŒããèããå¿ èŠããããŸãã Ivyã«ã¯ãHOCïŒæ°ããã³ã³ããŒãã³ããè¿ãã³ã³ããŒãã³ãïŒãããã«äœæããå¯èœæ§ããããŸãããããã¯å®éã®Angular APIã§ã¯äžå¯èœã§ãã£ãããéåžžã«è€éã§ããã
HTMLã³ãŒããååŸããŠããããæ¢åã®ã³ã³ããŒãã³ãã¿ã€ã/ã€ã³ã¹ã¿ã³ã¹ãšããŒãžãããšããèãã¯ãå®è¡æã«æå³ããããŸããã ã¢ãŒããã¯ãã£ã®äž»èŠãªååã®1ã€ã¯ãå®è¡æã®åäœãäºæž¬ããã¢ããªã±ãŒã·ã§ã³ã®å®å®æ§ãä¿èšŒããæ©èœã§ããããšãå¿ããªãã§ãã ããã HTMLãå€éšã®ã©ããããååŸããå¶åŸ¡ãããæ¹æ³ãªãã§äœ¿çšããããšã¯ãåãªãç²æ€å®éšã§ãããéçºã¢ãŒãã§ã¯äœ¿çšã§ããå ŽåããããŸãããå®çšŒåç°å¢ã§ã¯äœ¿çšã§ããŸããã
HTMLãå€éšã®ã©ããããååŸããå¶åŸ¡ãããæ¹æ³ãªãã§äœ¿çšããããšã¯ãåãªãç²æ€å®éšã§ãããéçºã¢ãŒãã§ã¯äœ¿çšã§ããå ŽåããããŸãããå®çšŒåç°å¢ã§ã¯äœ¿çšã§ããŸããã
å®è¡æã«ä»»æã®HTMLãã³ã³ãã€ã«ããããã®æå¹ãªãŠãŒã¹ã±ãŒã¹ããªããšèšã£ãŠããŸããïŒ ãããããªãã®èšãããããšãªã...ãŸãããã®ããã®ãŠãŒã¹ã±ãŒã¹ã¯ãããããããŸãã ãããã®ã»ãšãã©ã¯ããŠãŒã¶ãŒãäœæããŠã·ã¹ãã ã«éä¿¡ããHTMLãã³ãã¬ãŒããšé¢ä¿ããããŸãã
@ alarm9kãããç§ã¯ããªããäœãæå³ããã®ãç¥ã£ãŠããŸãã ãããŠããããå®éã®äž»ãªåé¡ã§ãã ã€ã³ã¿ãŒãã§ã€ã¹ã¯ããŸããŸãªæ¹æ³ã§èšèšã§ããŸãã ãããã®1ã€ã¯ããŠãŒã¶ãŒããçŽæ¥ããã·ã¥ãããHTMLã³ãŒããåãå ¥ããããšã§ããããŸãã åãããšãå¥ã®æ¹æ³ã§å¥ã®ã€ã³ã¿ãŒãã§ãŒã¹ã§è¡ãããšãã§ããŸãããåãã§ããå®å šãªçµæãåŸãããŸãã
ä»»æã®HTMLã®è§£æã«ã€ããŠè©±ããŠããå Žåã¯ãã³ã³ãã€ã«ãšã³ãŒãã®ä»ã®éšåãžã®ãã€ã³ãã«ã€ããŠãèŠããŠããå¿ èŠããããŸãã ãã®ããã«ã¯ãå®è¡æã«ã³ã³ãã€ã©ãŒãå¿ èŠã§ããããã«ãããAngularã®å®éã®ããŒãžã§ã³ã«æ»ããŸãã
HOCã¯ç°ãªãæ¹æ³ã§æ©èœããŸãã ããã¯ãå®è¡æã«ã段éçã«ãéšåçã«ãå¶åŸ¡ãããæ¹æ³ã§åçã«å®è¡ã§ããAPIã§ãããããã³ã³ãã€ã©ãŒã¯å¿ èŠãããŸããã
HOCã¯ç°ãªãæ¹æ³ã§æ©èœããŸãã ããã¯ãå®è¡æã«ã段éçã«ãéšåçã«ãå¶åŸ¡ãããæ¹æ³ã§åçã«å®è¡ã§ããAPIã§ãããããã³ã³ãã€ã©ãŒã¯å¿ èŠãããŸããã
ã§ã¯ãããã¯åçã³ã³ããŒãã³ããäœæããæ°ããæ¹æ³ã§ããïŒ ãããã¬ã¹CMSãããŒãžã£ãŒããCMSHtmlãååŸããå¿ èŠããããŸã
@CharlesElGriego HOCAPIã¯ãŸã å ¬éãããŠããŸããã æ°ããIvyã¬ã³ãã©ãŒãããŒã¹ã«ãããšãèšèšæ®µéã«ãããããã©ã®ããã«æ©èœããããããã³å©çšå¯èœãªãã¹ãŠã®å¯èœæ§ãæ£ç¢ºã«èšãããšã¯ã§ããŸããã HTMLãååŸãããããã³ã³ããŒãã³ãã¿ã€ã/ã€ã³ã¹ã¿ã³ã¹ã«ããã·ã¥ããŠUIãå€æŽããã ãã§ã¯ãªãããšãè¡šçŸãããã£ãã ãã§ãã
ãããã£ãŠãçŸæç¹ã§ã¯ã 1ã€ã®.ts
ãã¡ã€ã«ã®ã¿ã䜿çšããŠæ¬¡ã®åå²ãå®çŸããå¯èœæ§ã¯ãããŸãããïŒ
app.component.ts
ïŒæ¡ä»¶ãããå Žå->èµ€ã䜿çšããå Žåã¯éã䜿çšããïŒapp.component.red.html
app.component.blue.html
å®è¡æã«ããå¿ èŠã¯ãããŸãããã³ãŒãåå²ã®åçãªåäœãå¿ èŠãªã ãã§ãã
@knafteN templateUrl
ã¯æ¬¡ã®ãããªäžé
æŒç®åãåãå
¥ãããããããããããã€ãã®è¿œå ã®ã±ãŒã¹ããããŸãã
templateUrl: config.type === 1 ? 'red.html' : 'blue.html',
ãã ããAngularã³ã³ãã€ã©ãŒã¯ã³ã³ãã€ã«æ®µéã§ã³ãŒããå®è¡ããªããããæ¡ä»¶ãéçã«åæããå¿ èŠããããŸãã ãã ããããã¯åçãªåäœã解決ãããã®ã§ã¯ãªããAOTããã»ã¹äžã«éçã«è©äŸ¡ãããŸãã
@ MLC-mlapisã®ãããã§ãããªãã®ããªã¢ã³ãäœåããvscode / webstormã¯templateUrlãè©äŸ¡ããããšã¯ã§ããŸããããã³ã³ããŒãã³ãã«äœ¿çšãããŠããHTMLãã¡ã€ã«ãç¥ãããšãã§ããªããšããŠãhtmlãã¡ã€ã«ã®ããã®IDEãµããŒããè¡šçŸã䜿çšããŠã§ã¯ãªããäžå®ã®äŒæ©:(
@knafteNãããããã¯å¥ã®ã¿ã€ãã®åé¡ã§ãAngularèªäœã«ã¯çŽæ¥é¢ä¿ããŠããŸãããã
ãã®æ©èœãæ»ã£ãŠãããšã/ããããã°ãAngularããŒã ããã®ã¬ã€ãã³ã¹ã¯ãããŸããïŒ ã³ã¡ã³ãã軜èããäžæ¹ã§ïŒãã®æ©èœãå¿ èŠãªå Žåã¯ãã³ãŒãã£ã³ã°æ¹æ³ãããããªãïŒãäœæè ã¯æ°åãè¯ããªãå¯èœæ§ããããŸã-圌ãã¯å®éã«ã¯è³ªåã«çããŸããã å®è£ ãŠãŒã¶ãŒã«ããŒãžãã«ã¹ã¿ãã€ãºããæ©èœãæäŸããŸããçŸåšãé·å¹Žã«ããã£ãŠç«¶äºäžã®åªäœæ§ãç¶æããŠããæ©èœã¯ãããŸããã
ãŸã£ããç°ãªãæå¹ãªãŠãŒã¹ã±ãŒã¹ïŒIMHOïŒã«ã¯ããã®æ©èœãå¿ èŠã§ãã ç§ã¯è£œåãéçºããŠããŸãã ç§èªèº«ãéçºãããã¬ãŒã ã¯ãŒã¯ã¯ãµãŒããŒåŽã§ãã©ãŒã ãäœæããã¬ã³ããªã³ã°ãããã§è¡ãããŸãïŒãŸãã¯ããã¯ãšã³ããšåŒã¶ããšãã§ããŸãïŒã ããã¯ç§ã«ãšã£ãŠããã€ãã®å©ç¹ããããŸããããã®è°è«ããé ãããããšãã§ããŸãã
ããã§ããŠãŒã¶ãŒãããšãã°è£œåãæ€çŽ¢ãããããŒãžã§ãããžãã¹ããžãã¯ã¯ãã·ã¹ãã ã§ã®ã¢ã¯ã»ã¹èš±å¯ã«åºã¥ããŠæ€çŽ¢æ¡ä»¶ã«ããŸããŸãªèŠçŽ ãèšå®ã§ãããšãããã®ã§ãã ã€ãŸããäžæ¹ã®ãŠãŒã¶ãŒã¯äŸ¡æ Œåž¯ã§ãã£ã«ã¿ãªã³ã°ã§ããããäžæ¹ã®ãŠãŒã¶ãŒã¯ãã£ã«ã¿ãªã³ã°ã§ããªãå ŽåããããŸããã2çªç®ã®ãŠãŒã¶ãŒã¯ãã·ã¹ãã ã«è¿œå ãããæ¥ä»ãã§ãã£ã«ã¿ãªã³ã°ã§ããæåã®ãŠãŒã¶ãŒã¯ãã£ã«ã¿ãªã³ã°ã§ããŸããã
ãã®å Žåããã®æ€çŽ¢æ¡ä»¶ãã©ãŒã ãããã¯ãšã³ãããããŒããããã®èŠçŽ ãã¢ãã«ã«ãã€ã³ãããŸãã åãããšãã2012幎é ã«éçºããAngular1.xã§ãéåžžã«ããŸãæ©èœããŸããã ãã£ã¬ã¯ãã£ããã³ãã¬ãŒãã®URLã¯httpURLã§ããããã°ã€ã³ãããŠãŒã¶ãŒã®ã¢ã¯ã»ã¹èš±å¯ã«åºã¥ããŠãã©ãŒã ãè¿ãããã«äœ¿çšãããããã¯ãšã³ãã§ãã ããŠãAngularã§ã¯äžå¯èœã®ããã§ãã
ãŸããReactãè©ŠããŠã¿ãŸãããããããäžå¯èœã§ãã ïŒæ¬çªç°å¢ã§ã®ããã©ãŒãã³ã¹äžã®çç±ãããbabel /ã¹ã¿ã³ãã¢ãã³ã䜿çšããããããŸããïŒã
çŸåšæã人æ°ã®ããããã³ããšã³ããã¯ãããžãŒã®äž¡æ¹ã§ããã®ãããªè¡ãè©°ãŸãã«ã¶ã€ãã£ãŠé©ããŠããŸãã
AngularJSïŒ1.xïŒã«æ»ãããšã¯ãæ£åœåããã®ãéåžžã«é£ããããã§ãã
@harishrohaj HTMLã³ãŒãã«çŽæ¥ããããé©çšããªããšããäžè¬çãªåŸåããããŸãïŒAngularèªäœã ãã§ãªãïŒããã®ãããªã·ããªãªããã¹ãããå¯èœæ§ã¯éåžžã«éãããŠããïŒã¢ããªã¯ããããé©çšããããã®ããŸã£ããç¥ããªãïŒãäºæž¬ã§ããªãåçãªãã®ããã¹ãŠæžå°ããããã§ãããã®ãããªã¢ããªã®æåŸ ãããå®å®æ§ã
@ mlc-mlapisç§ã¯ããªãã®äž»åŒµãç解ããŠããŸãã
å®éãããã¯ä»¥åïŒAngularJSã§ïŒæå¹ãªæ¹æ³/æ©èœã§ãã£ãããããŠãŒã¶ãŒãšããŠããã«å¯ŸããŠèããã®ã¯å°ãé£ããã§ãã
ããããä»ã¯ãã®èãã«æ²¿ã£ãŠèããŠãããå¿
èŠãªèŠçŽ ã®æ
å ±ãããã©ãŒã ãäœæããèŠçŽ ãã¢ãã«ã«ãã€ã³ãã§ããã³ã³ããŒãã³ããäœæããããšã§ãç§ã®å Žåã®åé¡ã解決ã§ãããšæããŸãã
@harishrohajã¯ããAngularJSããAngularãžã®åãæ¿ããç¹ã«é ãåæã¢ãã«ãèªåçã«
@ mlc-mlapis-AngularJSããåãæ¿ããã ãã§ã¯ãããŸãã...ãã®æ©èœã¯Angular5ãŸã§å©çšå¯èœ
ãããã£ãŠãæ¬åœã®åé¡ã¯ããã®æ©èœã9ã«ããã®ãïŒææžåãããŠããªãã®ãïŒãããã«æ»ã£ãŠããã®ãã誰ããCKEditorã¿ã€ãã®ãã©ã°ã€ã³ãæãã€ããã®ããšããããšã§ãã
@virshuããã¯ãŸã ããã«ä»¥åãšåãæ©èœã§ãã ããã¯ãAOTãã³ãã«ã¢ããªã±ãŒã·ã§ã³å ã«JitCompilerãããŒãããŠãããã¢ãžã¥ãŒã«ãšHTMLãã³ãã¬ãŒããåçã«ã³ã³ãã€ã«ã§ããããšãæå³ããŸãã ãããŠãããã¯äžèšã®çç±ã§ãŸã æšå¥šãããŠããŸããã
ã²ãŒã ã®ãã1ã€ã®ç¹ã¯ãIvyïŒãŸã æ¬çªç°å¢ã§ã¯å©çšã§ãããçŸæç¹ãŸã§å éšäœ¿çšã®ããã«å®è£ ãããŠããªãïŒãšAPIã®ããã€ãã®æ°æ©èœã§ããããã«ãããHoCã³ã³ã»ããã®äœ¿çšããAngularããŒã ãåå ããŠããã³ã³ããŒãã³ãã®ããæè»ãªåçäœæãå¯èœã«ãªããŸããåãã
@ mlc-mlapis-ä»æ¥ã¯ããã®ã¹ã¬ãããéå§ãããŠãã3幎ã«ãªããŸãã ãããŠãæåãããéåžžã«å ·äœçãªè³ªåïŒãã³ãã¬ãŒããåçã«ããŒãããããšã¯å¯èœã§ããïŒãæèŠããŒã¹ã®ãã£ã¹ã«ãã·ã§ã³ïŒæšå¥šãããŸãããæªãç¿æ £ãªã©ïŒã«å€æŽããããšããŸãã
ããªãã®æããã«ééã£ã声æïŒãããã¯ãŸã ããã«ä»¥åãšåãæ©èœã§ãããïŒãèãããšãä»ã®ã³ã¡ã³ããé¡é¢éãã«åãåãããšã¯å°é£ã§ãã ãããã£ãŠãå¯èœã§ããã°ãAngularããŒã ã®ã¡ã³ããŒã«äºå®æ å ±ã®æäŸãä»»ããŠãã ããã
DÄkuji:)
@virshuãã®ã¹ã¬ããã®éå§è
ãšããŠãç§ã¯ããªãã«å®å
šã«åæããŸãã æéã¯é£ã¶:-)
ä»åŸã®ãã¿ã®ãªãªãŒã¹ã«ãç§ãã¡ã«è§£æ±ºçãæäŸããäœããããããšãç§ã¯ãŸã æãã§ããŸã
@virshuããŒããç§ãèšã£ãã®ã¯äœãééã£ãŠããã誀解ãæãã®ã§ããïŒ ããªãã®å®åŒåã¯ïŒ
ãã®æ©èœã¯Angular5ãŸã§å©çšå¯èœã§ãããããã®åŸåé€ãããŸãã
It's still here the same functionality as before. It means that you can still load JitCompiler ...
ã¯åé€ãããªãã£ãããšãæå³ããAOTã®æŠå¿µã¯Angular 2ãçãŸããæåã®ç¬éããããã«ããããã以åãšåãããã«ããã«ãããŸãã
åçãªçŽæ¥HTMLããããAngularJSã§å©çšå¯èœã§ãããšèšãããããAngularã§ã¯ãŸã£ããå©çšã§ããªãå Žåã¯ããã®éãã§ãããããã¯å¥ã®è©±ã§ãã
ç§ãã
1:55 KarlXOLã®ã§ã¯æšã2020幎3æ19æ¥ã«[email protected]æžããŸããïŒ
@virshu https://github.com/virshuãã®ã¹ã¬ããã®ã€ãã·ãšãŒã¿ãŒãšããŠãç§ã¯
å®å šã«ããªãã«åæããŸãã æéã¯é£ã¶:-)
ä»åŸã®ãã¿ã®ãªãªãŒã¹ã«äœããããããšãç§ã¯ãŸã æãã§ããŸã
ç§ãã¡ã«è§£æ±ºçãæäŸããâ
ããªããèšåãããã®ã§ããªãã¯ãããåãåã£ãŠããŸãã
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããGitHubã§è¡šç€ºããŠãã ãã
https://github.com/angular/angular/issues/15275#issuecomment-601002102 ã
ãŸãã¯è³Œèªã解é€ãã
https://github.com/notifications/unsubscribe-auth/AAFMV7QNGXRPZZIHZSQSQ2TRIGXUJANCNFSM4DEFOTBA
ã
+1
ç§ã¯é·ãéãã®ã¹ã¬ããã«å·çããŠããŠããã€ãããã¯htmlãåããã³ã³ããŒãã³ããèŠããã®ã§ãããããã£ãšAngularãã«æ°ãå€ããããšãæããŸããã çæ³çãªã±ãŒã¹ã§ã¯ããã®ã¹ã¬ããããããã€ãããã¯htmlã䜿çšããã®ãæãç°¡åãªæ¹æ³ã§ããç¶æ³ã®ãã¹ããã©ã¯ãã£ã¹ã®ãããªãã®ãæåŸ ããŠããŸãã
äŸãæ³åããŠã¿ãŸãããïŒãã€ãããã¯HTMLã®Hello Worldã§ã¯ãªããããå°ãåºç¯ãªäŸã§ããä»ã®ãŠãŒã¶ãŒã詳现ãè¿œå ã§ããŸãïŒã ïŒèãïŒ
_ç§ã¯ãåé貚ã¿ã°ïŒAUDãªã©ïŒãã€ã³ããã¯ã¹ïŒããŠã»ãžã§ãŒã³ãºïŒãçºæ¿ã¬ãŒãïŒEUR / USDïŒããŸãã¯ãŠãŒã¶ãŒãŸãã¯èšäºãžã®ãªã³ã¯ïŒ@ userãŸãã¯ïŒarticle_idïŒã«ãã£ãŠãããã®ã¿ã°ãå€æããã蚌åžååŒæã·ã¹ãã ãäœæããŸãããŸããŸãªæ©èœãæã€Angularã³ã³ããŒãã³ãã«å€æããŸãã èšäºã¯ãŠãŒã¶ãŒèªèº«ãç·šéããããŒã¿ããŒã¹ã«ä¿åãããŸãã ã·ã¹ãã ã¯ããã¹ãŠã®ã³ã³ããŒãã³ããããŒããããèšäºã衚瀺ããå¿
èŠããããŸãã_
è«ççã«ã¯ãåçŽãªè§£æ±ºçã¯ãããŒã¿ããŒã¹ããããŒããããåçã³ã³ãã³ããæã€ã³ã³ããŒãã³ãã§ãã
AngularããŒã ã®èª°ãïŒ_ç³ãèš³ãããŸããããããã¯ç§ã®å¯èœæ§ãè¶
ããŠããŸã_ïŒãAngularããã°ã«èšäºãæžãããšãã§ããŸããïŒé·ãéèšäºãå
¬éãããŠããªãããïŒãçŸåšã®Angularããã³åçãã³ãã¬ãŒãã䜿çšããŠãã®ãœãªã¥ãŒã·ã§ã³ãå®çŸããæ¹æ³ïŒ_äœãã®ãããªãã®æåã§ããæšå¥šãããªãã¢ãããŒã_ïŒããªããã®ãããªãœãªã¥ãŒã·ã§ã³ãééã£ãŠããã®ãïŒæªããã¹ããæªãå¹çã®ãããªãã®ãæåŸ
ããŠããŸã...ïŒãããŠAngularã«æºæ ããããã«ã¢ããªã±ãŒã·ã§ã³ãå€æŽããã«ã¯ã©ãããã°ããã§ããïŒã®èšèšïŒïŒãã¶ã€ã³ïŒAngularã䜿çšããŠãã®ãããªã¢ããªã衚瀺ããããšãæšå¥šãããå ŽåïŒã
ãã®ã¹ã¬ãããèŠããšãã®çæ³çãªçµæïŒããã§è¿°ã¹ãããã«ãAngularã¯åžžã«ãããå¯èœã«ããŠããã®ã§ïŒã¯ããããåçã«ïŒééã£ãæ¹æ³ã§ïŒæ¹æ³ãšãAngularã«ãããšæ£ããã³ãŒãã£ã³ã°ããæ¹æ³ã®äŸã§ãã
ãšã³ã¿ãŒãã©ã€ãºãããžã§ã¯ãã®ããŒãžã§ã³2ããã®Angularã§ã¯ããåçãã³ãã¬ãŒãèªã¿èŸŒã¿ããªã©ã®æ©èœã®ãŠãŒã¹ã±ãŒã¹ã¯ãããŸããã§ããããã®åé¡ãæçµçã«éããŸã
ãšã³ã¿ãŒãã©ã€ãºãããžã§ã¯ãã®ããŒãžã§ã³2ããã®Angularã§ã¯ããåçãã³ãã¬ãŒãèªã¿èŸŒã¿ããªã©ã®æ©èœã®ãŠãŒã¹ã±ãŒã¹ã¯ãããŸããã§ããããã®åé¡ãæçµçã«éããŸã
ããã«ã¡ã¯ãããªãã¯ééã£ãŠãããšæããŸã...以åã®ã³ã¡ã³ãã§ãããã«å¯Ÿããã解決çããè¿œå ããŸããããããæåã§ã¯ãªãããšã¯ããã£ãŠããŸãããçŸæç¹ã§ã¯Angularã䜿çšããŠãããã¬ã¹CMSãå®è£ ããæ¹æ³ããªãããããã®ã¢ãããŒããæ¡çšããå¿ èŠããããŸããã ..ç§ã®ãã³ãã¬ãŒãHTMLã¯CMSïŒUmbracoïŒããæ¥ãŠããŸã
@CharlesElGriegoããªãã®è§£æ±ºçã¯äœã§ããïŒ ããªãã®èšç»ã説æããŠããã ããã°ãäžç·ã«PRãè¡ãããšãã§ããŸããïŒ
@CharlesElGriegoããªãã®è§£æ±ºçã¯äœã§ããïŒ ããªãã®èšç»ã説æããŠããã ããã°ãäžç·ã«PRãè¡ãããšãã§ããŸããïŒ
ãããPRã¯ãããŸãããããã¯ã³ã¢ãœãªã¥ãŒã·ã§ã³ã§ã¯ãããŸãã...ããã¯Jitã³ã³ãã€ã©ã䜿ã£ããœãªã¥ãŒã·ã§ã³ã§ããããã¯ç§ãç§ã®ããŒãºã®ããã«èŠã€ããããšãã§ããå¯äžã®ãã®ã§ãã ããããç§ã¯ãŸã aotã䜿çšããŠããããã¬ã¹CMSã«äœ¿çšã§ãããœãªã¥ãŒã·ã§ã³ãæ¢ããŠããŸã
https://github.com/CharlesElGriego/angular-aot-dynamic-components
ããªãã®å Žåã®@CharlesElGriegoãœãªã¥ãŒã·ã§ã³ã¯ããããã¬ã¹CMSããŒã¿æ§é ã®ãã«ããŒãå®è£
ããããšã§ããè§åºŠã³ã³ããŒãã³ãã䜿çšããããšã§ãã³ã³ããŒãã³ãã«åçãã³ãã¬ãŒããå«ããããšã¯ã§ããŸãããã³ã³ããŒãã³ãã®åäœã«äžè²«æ§ããªããªãããã§ãã
@allã¯ããã®æ©èœã«çŠç¹ãåœãŠãæçš¿ãå«ãããããããã°ã©ãã³ã°ãéå§ããæ¹ãããã§ãããã
ãžãŒã @ djleonskennedy-å«ããªã®ã¯ãæ確ã§å®çšçãªè³ªåãç¡æå³ãªæèŠã«åºã¥ããè°è«ã«å€ããããšããããªãã®ç¹°ãè¿ãã®è©Šã¿ã«ãããã®ã§ãïŒ æããããååŸããŠãã ããã à ÑлО14ÑелПвекгПвПÑÑÑÑÑПÑÑпÑÑÐœãМаЎПОЎÑОÑпаÑÑïŒ
@virshué¡ãçž®ããŠãã ãã
ã©ããã玳士ããã®ãããªçãã¯ç§ãã¡ãåé²ãããŸããã Angularã³ã¢ããŒã ããã®å¿çããªããã°ãç§ãã¡ã¯ç§»åããªããšæããŸãã é¢ä¿ã®ãªãäŒè©±ã«å·»ã蟌ãŸããŠããŸã£ãå Žåã¯ãããããããè©«ã³ç³ãäžããŸããã @ karaã¯IVYã®éšåã«çŠç¹ãåœãŠãã¢ããã€ã¹ãããŠããããšæããŸãã @shmoolã¯ãAngularãš@bradlygreenã¯ïŒ2018幎ã®æçš¿ã§ïŒåçãã³ãã¬ãŒããIVYã®å©ç¹ã®1ã€ã§ãããšè¿°ã¹ãŸããã
ãã®ã¹ã¬ããã«ã³ã¡ã³ãããŠããã ããã°ïŒng-confã§ã®è·åã«é¢ããŠïŒããã®è°è«ãç°¡åãªæ¹æ³ã§èŠçŽããããšæããŸãã
Angularããã°ã®ãã®ãããã¯ã«é¢ããèšäºã¯ç¢ºãã«çŽ æŽãããã¢ã€ãã¢ã§ãããã ïŒããšãã°ãIVYã䜿çšããŠãããæ£ããè¡ãæ¹æ³ãããã³/ãŸãã¯ãã®ã¢ãããŒããæ£åœåãããªããšæãããå Žåã¯ãã¢ããªã®èšèšã®èŠ³ç¹ããã¢ããªãå€æŽããŠãã®ãããªèŠä»¶ãåé¿ããæ¹æ³ã瀺ããŸããïŒ
ãããããé¡ãããŸã
ã¿ãªãããããã«ã¡ã¯ãMichielã¯ãManfredã«ããèå³æ·±ãèšäºãææããŠãããŸããã ãã®èšäºã®æåŸã«ã¯ããå®è¡æã®ã³ã³ãã€ã«ããšããããŒãã¹éšåããããŸãã ä»ã¯ããŸãæéããããŸãããããã®ã¢ãããŒãã§å®å šãªæ©èœã³ã³ããŒãã³ããäœæã§ããã°ã誰ãããã¢ãäœæããããšããå¯èœæ§ããããŸãã
ã³ãŒãã®éèŠãªéšåïŒ
import '@angular/compiler';
@Component({ template: '' })
class HigherOrderComponent { [...] }
ɵcompileComponent(HigherOrderComponent, { template: '<b>Hello</b>' });
ããªãã¯ãããèŠãããšãã§ããŸãïŒ https ïŒ
@ mlc-mlapisã¯ã 'ng build --prod'ã®å Žåã«æ©èœããŸããïŒ ãŸããããªãã®äŸã§ã¯ååãäžåºŠã¬ã³ããªã³ã°ãããã®ãèŠãŸããããå ¥åããå€æŽããããšãã«ååãæŽæ°ããããšãã§ããŸããã§ããã 足ããªããã®ã¯ãããŸãããïŒ
@atirisããªãã質åãã©ã®ããã«æ瀺ãããã倧奜ãã§ãã å¿ èŠãªå®è£ ãæ£ãããã©ãããè°è«ããã®ã§ã¯ãªããéçºè ã«åé¡ã解決ããæ£ããæ¹æ³ãæããŠããããŸãã ããªãã«ãšã£ãŠè¯ãããšã§ãããããŸãããã°ãããã«åããèŠãããã§ãããïŒHOCãçãã§ãããã©ããã«ãã£ãŠç°ãªããŸãïŒã
@jqsjqsããã¯ãå®éã®äžäœäºææ§ã®ããã«ãŸã å ¬éãããŠããªããå éšAPIã«é¢ããåçŽãªäŸã«ãããŸããã ããããããªãã¯APIãšããŠå©çšå¯èœã«ãªãã¹ã±ãžã¥ãŒã«ãšãæ£ç¢ºãªåœ¢åŒã«ã€ããŠã®æ£ç¢ºãªæ å ±ã¯ãããŸããã ãŸããããã§ã¯NgZoneã¯é©çšãããªããããã¢ãã«ãå€æŽããŠããã¥ãŒã¯æŽæ°ãããŸããã ãã¥ãŒ->ã¢ãã«ã®æ¹åã®ã¿ãæ©èœããŸãã
ããã«ã€ããŠãå®éã®ãŠãŒã¹ã±ãŒã¹ããã©ããªãããŸã ããããªãå Žåã¯ã1ã€ã«ééããçããå¿
èŠã§ãã
ç§ã¯ãåããµãŒããŒäžã§è€æ°ã®ããã³ããåæã«åŠçãããœãããŠã§ã¢ãäœæããŠããäŒç€Ÿã§åããŠããŸãã httpãªã¯ãšã¹ããããã³ãã¬ãŒãããã«ã§ããè§åºŠã³ã³ããŒãã³ããäœæããå¿
èŠããããŸãã ãããå¿
èŠãªã®ã¯ãã¯ã©ã€ã¢ã³ãããã¥ãŒãã«ã¹ã¿ãã€ãºã§ããããã«ããããã§ãïŒdivã®äžŠã¹æ¿ãã衚瀺ãããããããã£ã®å€æŽãªã©ïŒã ãªã¯ãšã¹ããä»ããŠãã³ãã¬ãŒããããŒãããæ©èœã«ãããããã©ã«ãããŒãžã§ã³ãæè»ã«äœæã§ããŸããããã©ã«ãããŒãžã§ã³ã¯ãååšããå Žåã¯ãããŒããããŒãžã§ã³ã§äžæžããããŸãã
ãã³ãã¬ãŒãã®ä»£æ¿ããŒãžã§ã³ãå®éã«ã¢ããªã±ãŒã·ã§ã³ãç Žå£ããå¯èœæ§ãããããšãå®å
šã«ç解ããŠãã ãããããã¯æ¢ç¥ã®ãªã¹ã¯ã§ãããåãå
¥ããããŠããŸãã
@ Nixon-Josephãããã£ãŠã顧客ãããã©ã«ãã®ãã³ãã¬ãŒãåäœãå€æŽã§ããããã«ãããã®ã³ã³ããŒãã³ãã®APIïŒããšãã°ãJSONã«åºã¥ãïŒïŒã³ã³ããŒãã³ãã¯ãã®APIãå
éšçã«ãµããŒãããïŒãå¿
èŠã§ãããããã€ã³ããããå
¥åããããã£ã®ã»ãããå®çŸ©ããå¿
èŠããããŸãïŒåé¢ãããå€æŽæ€åºã®å©ç¹ïŒãŸãã¯\ã«åºã¥ãäºæž¬
ããªãã®æç« Fully understand that the alternate version of the template could indeed break the application, and that is a known and accepted risk.
ã¯ãAngularã³ã¢ããŒã ã®ã¢ãŒããã¯ãã£ã®èŠ³ç¹ãšæ¯èŒããŠãããããéèŠãªèª€è§£ã§ãã åã«ãããã©ãŒãã³ã¹/å®å®æ§/ãã¹ãã®èŠ³ç¹ããçå£ã«ä¿èšŒã§ããªããã®ãå°å
¥ããããšã¯ã圌ãã®åŽããã¯åãå
¥ããããŸããã ããªãããããããªãã®åŽãã蚱容ã§ãããªã¹ã¯ã§ãããšå®£èšãããšããŠããããã¯æçµæ±ºå®ã«åœ±é¿ãäžããŸããã
@ Nixon-Joseph-angular.ioã匷åããã¢ããªã±ãŒã·ã§ã³ã§æ¡çšããã¢ãããŒããèŠãŠã¿ãããšæããããããŸããã ã³ã³ãã³ãã®åããŒãžã¯åçã«ïŒHTTPçµç±ã§ïŒããŒããããDOMã«ã€ã³ã¹ã¿ã³ã¹åãããŸããè§åºŠèŠçŽ ã䜿çšããŠãç¹å®ã®åçãªåäœãéçãªã³ã³ãã³ãã«å«ããããšãã§ããŸãã https://github.com/angular/angular/blob/master/aio/src/app/layout/doc-viewer/doc-viewer.component.ts#L131-L153ãåç §ããŠ
@ mlc-mlapisãåçããããšãããããŸãã
@pedroclaymanããã¯é¢çœããã§ãããAngularãåçã³ã³ãã³ããã³ã³ããŒãã³ãã®äžéšã§ãããã®ããã«æäœã§ããããã«ããŸããïŒ åºæ¬çã«ãå®å
šã«æ©èœããã€ã³ã¿ã©ã¯ãã£ãã³ã³ããŒãã³ããã¬ã³ããªã³ã°ããå¿
èŠããããŸãã ç§ã¯ããªããæäŸãããã®ãèŠãŠããŸããããããŠããã¯ææã§ããããã«èŠããŸãããããç§ã¯ç§ãã¡ãå¿
èŠãšãããã®ãå
·äœçã«æã瀺ãæçœãªãã®ïŒå°ãªããšãç§ã«ã¯ïŒãèŠãŸããã
ç§ã¯å®éã«ç§ãã¡ã®ããã«åã解決çãèŠã€ããŸãããå¯äžã®æ¬ ç¹ã¯ç§ãã¡ããã®ãããžã§ã¯ãã®ããã«AoTã³ã³ãã€ã«ãç¡å¹ã«ããªããã°ãªããªããšããããšã§ãã
åãããšãæãã§ããç§ã®åŸã«æ¥ã人ã®ããã«-ããã¯ç§ããã£ãããšã®ç°¡åãªæŠèŠã§ãã
ãŸããããã§ç§ã®ãœãªã¥ãŒã·ã§ã³ã®ããŒã¹ãèŠã€ããŸããïŒ https ïŒ 2Fapp.component.tsãããå
±æãã«ããŒã«æå
¥ããŸããïŒ
import { Component, NgModule, Compiler, ViewContainerRef, Type } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { SharedModule } from '../modules/shared.module';
export class DynamicComponentHelper {
public static addComponent<ViewModelType = any>(compiler: Compiler, container: ViewContainerRef, template: string, viewModel?: ViewModelType, components: Array<Type<any>> = []): void {
@Component({ template: template })
class DynamicComponent {
public vm: ViewModelType = viewModel;
constructor() { }
}
components.push(DynamicComponent);
@NgModule({
imports: [BrowserModule, SharedModule],
declarations: components
})
class DynamicComponentModule { }
const mod = compiler.compileModuleAndAllComponentsSync(DynamicComponentModule);
const factory = mod.componentFactories.find((comp) =>
comp.componentType === DynamicComponent
);
const component = container.createComponent(factory);
}
}
ããããç§ã¯ããããã®ããã«åŒã¶ã³ã³ããŒãã³ããæã£ãŠããŸã...
export interface VM { text: string; }
@Component({
selector: 'app-component',
template: `<ng-template #dynamicComponent></ng-template>`
...
})
export class VariationsComponent implements OnInit, AfterViewInit {
@ViewChild('dynamicComponent', { read: ViewContainerRef }) _container: ViewContainerRef;
private vm: VariationsComponentVM = { text: 'Hello World' }
private viewInitialized: boolean = false;
private componentTemplate: string;
constructor(private compiler: Compiler) { }
ngAfterViewInit(): void {
this.viewInitialized = true;
this.setUpDynamicComponent();
}
ngOnInit(): void {
this.httpService.getComponentTemplate().subscribe(template => {
this.componentTemplate = template;
this.setUpDynamicComponent();
});
}
private setUpDynamicComponent(): void {
if (this.viewInitialized === true && this.componentTemplate) {
DynamicComponentHelper.addComponent(this.compiler, this._container, this.componentTemplate, this.vm, [NestedComponent]);
}
}
}
ãããŠã䜿çšãããŠããå®éã®ãã³ãã¬ãŒãã¯ã次ã®ããã«åçŽã§ããå¯èœæ§ããããŸã...
<div>{{ vm.text }}</div>
<app-nested [input]="vm.text"></app-nested>
ããã®å€§ããªéšåã¯ããã¹ãŠã®çµã¿èŸŒã¿ã®è§åºŠãã³ãã¬ãŒãæ©èœããã¹ãŠã®ãã£ã¬ã¯ãã£ããããã³ãã¹ãŠã§ãã ç¹°ãè¿ãã«ãªããŸãããå¯äžã®æ¬ ç¹ã¯ãAoTã倱ãå¿ èŠãããããšã§ãã ã³ã³ããŒãã³ãã¬ãã«ã§AoTãç¡å¹ã«ããããšã¯å¯èœã§ãã/å¯èœã§ããïŒ ãããžã§ã¯ãã®å€§éšåãAoTã§ã³ã³ãã€ã«ã§ããã°ããã®ã§ãããå®çŸ©ããããã®ã¯é€å€ããŸãã
ä»ã®ãšãããç§ã®ãã«ãã³ãã³ãã¯æ¬¡ã®ããã«ããå¿
èŠããããŸãã
ng build ProjectName --aot=false
ãšng build ProjectName --prod --aot=false --build-optimizer=false
@ Nixon-Josephãããããã¯ãã£ãšåã«äœæãããç§ã®æŽå²çãªãã¢ã§ããã éåžžãã¢ããªã¯éåžžã©ããAOTã¢ãŒãã§ãã«ãã§ããã¯ãã§ããããã«ãJitCompilerïŒãã®ããŒãã¯ãã¢ã³ãŒãã«é¢ããAngular GitHubã®åé¡ã§èª¬æãããŠããŸãïŒãæ¿å ¥ããããã䜿çšããŠã¢ãããã¯ãã³ãã¬ãŒããåçã«ã³ã³ãã€ã«ããå¿ èŠããããŸãã ãããã£ãŠãæçµçã«ã¯ãAOT + JITãçµã¿åããããœãªã¥ãŒã·ã§ã³ãçµã¿åãããããšãã§ããŸãã ããã©ãŒãã³ã¹/ã»ãã¥ãªãã£/å®å®æ§ã®çç±ãããAngularã³ã¢ããŒã ããã¯æšå¥šãããŠããŸããããããã§ãçæ³çã§ã¯ãããŸããããæ©èœããŠããŸãã ãŸããã³ã³ããŒãã³ãã®ã«ã¹ã¿ãã€ãºå¯èœãªã€ã³ã¿ãŒãã§ã€ã¹ã®æ¡åŒµãããå¯èœæ§ã«æè³ããå¶åŸ¡ãªãã§HTMLã³ãŒãã«ããããé©çšã§ããªãããã«ããããšããå§ãããŸãã JitCompilerã¯ãäžéšã®ç¡å¹ãªãã³ãã¬ãŒãã®äœ¿çšãååããåæ¢ããããšãã§ããŸãããããã§ãã顧客ããµããŒãããæ¹æ³ã¯ãããŸããããŸãã
@ mlc-mlapisã³ã¡ã³ãããããšãããããŸãã ãã®.render
é¢æ°ã§èŠããã®ããç§ãã¡ãè¡ã£ãŠããããšãšçµ±åããããšæããŸãã ããããç§ã¯ãã€/ã©ã®ããã«é²ãããã«ã€ããŠååã«ç解ããŠããªããšæããŸãã ç§ã®äž»ãªç®æšã¯ãAoTãåŒãç¶ã䜿çšããååŸãããã³ãã¬ãŒããä»ããŠåçã³ã³ããŒãã³ããããŒãã§ããããã«ããããšã§ãã å®çšŒåã¢ãŒãã§ã¯ãAoTã䜿çšããªãå Žåããããžã§ã¯ãïŒãã¹ãŠã®ãã¡ã€ã«ãåããããã®ïŒã¯ã»ãŒ2Mã§ãããAoTã䜿çšãããš800Kæªæºã«ãªããŸãã ãœãªã¥ãŒã·ã§ã³ãAoTã³ã³ãã€ã«ããããšãããšã addComponent
ã®@Component
éšåã§ãšã©ãŒãã¹ããŒãããŸãã
ææ¡ããããœãªã¥ãŒã·ã§ã³ãã©ã®ããã«ãªããã«ã€ããŠã®ç°¡åãªäŸãæäŸããããšã¯å¯èœã§ããããïŒ ãã®äŒè©±ããã®ãã¬ããããåŒãé¢ããŠãäžå¿
èŠã«èšããŸããªãããã«ããããšæããŸãã
@ Nixon-Josephã¯angular / angular-cliïŒ17663ã§éå§ããŸããããã¯ãCLIã®`buildOptimizer`
ã®å®éã®åé¡ã§ãããAOTã³ã³ãã€ã«ã¯å¯èœã§ãããããªãŒã·ã§ãŒãã³ã°ã®æé©åã¯å®äºããŠããŸããã åçŸãã¢ã¯https://github.com/jcgillespie/ng-dynamic-optimized-reproã§ãããå®éã®ææ°ããŒãžã§ã³ã®Angularã§ãã«ããæé©åããªããŠããã³ã³ã»ãããæ¯æŽããããšãã§ããŸãã
@ Nixon-Josephã¯angular / angular-cliïŒ17663ã§éå§ããŸããããã¯ãCLIã®
`buildOptimizer`
ã®å®éã®åé¡ã§ãããAOTã³ã³ãã€ã«ã¯å¯èœã§ãããããªãŒã·ã§ã€ã¯ã®æé©åã¯å®äºããŠããŸããã åçŸãã¢ã¯https://github.com/jcgillespie/ng-dynamic-optimized-reproã§ãããå®éã®ææ°ããŒãžã§ã³ã®Angularã§ãã«ããæé©åããªããŠããã³ã³ã»ãããæ¯æŽããããšãã§ããŸãã
@ mlc-mlapis
ãããä»ã®Angularã®åé¡ã§ãã åæ©èœã®ãªã¯ãšã¹ãã¯ãäœããã§ããããããŠãã£ãšé »ç¹ã«ã§ããªããšããæè¡çãªçç±ã®äœããäœãã«ã€ããŠã®çµããã®ãªãè°è«ãåŒãèµ·ãããŸãã
ãã®ææ
çãªçºçã«ã€ããŠç³ãèš³ãããŸããã ããããç§ãã¡éçºè
ã¯ãïŒãã®ãããªïŒåŸ
æã®æ©èœãé
ããªããå€ãã®å ŽåãæäŸãããªãã®ãåŸ
ã£ãŠããŸãã
ããšãã°ãä»ã®æ©èœã¯é
延èªã¿èŸŒã¿ãªã©ã®æ¹åã§ãã ä»ã®ãã©ãããã©ãŒã ãšæ¯èŒããŠãAngularãå°é¢ã倱ã£ãŠããããã«èŠããŸã
ç§ãšããããä»ã®å€ãã®äººã¯ãèšç»ãããè§åºŠã®ç¹åŸŽã«é¢ããææ矩ãªããŒãããããæ¬åœã«æè¬ããŸãã
ããããšã
ããã«ã€ããŠãå®éã®ãŠãŒã¹ã±ãŒã¹ããã©ããªãããŸã ããããªãå Žåã¯ã1ã€ã«ééããçããå¿ èŠã§ãã
ç§ã¯ãåããµãŒããŒäžã§è€æ°ã®ããã³ããåæã«åŠçãããœãããŠã§ã¢ãäœæããŠããäŒç€Ÿã§åããŠããŸãã httpãªã¯ãšã¹ããããã³ãã¬ãŒãããã«ã§ããè§åºŠã³ã³ããŒãã³ããäœæããå¿ èŠããããŸãã ãããå¿ èŠãªã®ã¯ãã¯ã©ã€ã¢ã³ãããã¥ãŒãã«ã¹ã¿ãã€ãºã§ããããã«ããããã§ãïŒdivã®äžŠã¹æ¿ãã衚瀺ãããããããã£ã®å€æŽãªã©ïŒã ãªã¯ãšã¹ããä»ããŠãã³ãã¬ãŒããããŒãããæ©èœã«ãããããã©ã«ãããŒãžã§ã³ãæè»ã«äœæã§ããŸããããã©ã«ãããŒãžã§ã³ã¯ãååšããå Žåã¯ãããŒããããŒãžã§ã³ã§äžæžããããŸãã
ãã³ãã¬ãŒãã®ä»£æ¿ããŒãžã§ã³ãå®éã«ã¢ããªã±ãŒã·ã§ã³ãç Žå£ããå¯èœæ§ãããããšãå®å šã«ç解ããŠãã ãããããã¯æ¢ç¥ã®ãªã¹ã¯ã§ãããåãå ¥ããããŠããŸãã
ããã«ã¡ã¯ãGitHubã«ãœãªã¥ãŒã·ã§ã³ããããŸããAOTã§ãæ©èœããŸã:)
https://github.com/CharlesElGriego/angular-aot-dynamic-components
@KarlXOLããããŸããã ããããç§ã¯ãŸããããªããå šäœãšããŠã¢ã³ã®ã¥ã©ãŒã«é¢ããŠéšåçã«äžå ¬å¹³ã ãšæããŸãã 確ãã«ããã£ãšããŸãèšèšã§ããè€éãªéšåãããã€ããããŸããããããã®é åã§ã®ç Žå£çãªå€æŽã¯ããã«åé¡ããããéåžžã«æ³šæããŠäœæããå¿ èŠãããããšãããç解ããŠããŸãã
ãŸããäž»èŠãªAngularãã«ãã£ã³ã°ã¹ããŒã³ã®1ã€ã§ããããã³ãã¬ãŒãã®åçãªå¿åãããã«å¯ŸããŠçŽæ¥çãªäœçœ®ã«ããã³ã³ãã€ã©ã®éçåæããããŸãã ç§ãã¡ã®å€ãã¯åžžã«ãæ·±å»ã§å±éºãªåŠ¥åãããã«åæ¹ãæºè¶³ãããè³¢ã解決çãèããæ¢ããŠããŸãã
@ mlc-mlapis
ãåçæé£ãããããŸãã ããªããšããªãã®ããŒã ãå
æ¬çãªãå¿å°ããããã©ãããã©ãŒã ãšç°å¢ãæäŸããããã«Angularã«æè³ããŠããæéãšé è³ã«æ¬åœã«æè¬ããŠããŸãã ã©ããããããšãããããŸããïŒ
ãããäžæ¹ã§ãéå»6ãæéãããªãã®ããŒã ã¯ããã©ãããã©ãŒã ãåé²ãããããšã«éäžã§ããããããè§åºŠããã©ãããã©ãŒã ãããŒã«ã®è€éããäŸåé¢ä¿ãªã©ã«èŠåŽããŠããããã«æããŸããã
éçºè
ã®æ¥åžžã®ããžãã¹ããŒãºã«å¯Ÿããæ©èœã®åºåã¯é
ããªã£ãŠããŸãã IvyãäŸã«ãšããšããããŸã§ã¯èå°è£ã§æ©èœããŠãããããã»ã¹ãå質ã®ã¢ããªã±ãŒã·ã§ã³éçºãæ¹åããããã«ãããŸã§éçºè
ããŒã«ããã¯ã¹ã«ç»å ŽããŠããŸããã§ããã
ç§ã¯éå»ã«Angularã«è³ããŠããŸããããå°æ¥ã¯ããããããšæã£ãŠããŸãã
ããã«ã€ããŠãå®éã®ãŠãŒã¹ã±ãŒã¹ããã©ããªãããŸã ããããªãå Žåã¯ã1ã€ã«ééããçããå¿ èŠã§ãã
ç§ã¯ãåããµãŒããŒäžã§è€æ°ã®ããã³ããåæã«åŠçãããœãããŠã§ã¢ãäœæããŠããäŒç€Ÿã§åããŠããŸãã httpãªã¯ãšã¹ããããã³ãã¬ãŒãããã«ã§ããè§åºŠã³ã³ããŒãã³ããäœæããå¿ èŠããããŸãã ãããå¿ èŠãªã®ã¯ãã¯ã©ã€ã¢ã³ãããã¥ãŒãã«ã¹ã¿ãã€ãºã§ããããã«ããããã§ãïŒdivã®äžŠã¹æ¿ãã衚瀺ãããããããã£ã®å€æŽãªã©ïŒã ãªã¯ãšã¹ããä»ããŠãã³ãã¬ãŒããããŒãããæ©èœã«ãããããã©ã«ãããŒãžã§ã³ãæè»ã«äœæã§ããŸããããã©ã«ãããŒãžã§ã³ã¯ãååšããå Žåã¯ãããŒããããŒãžã§ã³ã§äžæžããããŸãã
ãã³ãã¬ãŒãã®ä»£æ¿ããŒãžã§ã³ãå®éã«ã¢ããªã±ãŒã·ã§ã³ãç Žå£ããå¯èœæ§ãããããšãå®å šã«ç解ããŠãã ãããããã¯æ¢ç¥ã®ãªã¹ã¯ã§ãããåãå ¥ããããŠããŸããããã«ã¡ã¯ãGitHubã«ãœãªã¥ãŒã·ã§ã³ããããŸããAOTã§ãæ©èœããŸã:)
https://github.com/CharlesElGriego/angular-aot-dynamic-components
@CharlesElGriegoããããšã
@KarlXOL @ mlc-mlapisããã§ããªãã®äž¡æ¹ã®ãã€ã³ãã確å®ã«èŠãããšãã§ããè°è«ãè¡ãããŠããããšã«æè¬ããŸãã ãšã¯ãããç§ã¯ããã«ã€ããŠã¯@KarlXOLã®åŽã«ããŸãã ç§ã¯Angularãå¯èœãªéãå®å
šã§å®å®ãããè©Šã¿ãå®å
šã«ç解ããå°éããŠããŸãããæ©èœïŒèŠæ±ããããã®ãªã©ïŒãæã£ãŠããŠãåé¡ã¯ãªãã䜿çšãçŠæ¢ããããšãææ¡ããããã¥ã¡ã³ãã䜿çšããŠãå°ãéªéã«ãªããªãããã«ããŸã-ããã«ãã¹ãŠã®æ£åœãªçç±ããªã¹ãããŸãã
ããã§äž¡æ¹ã®ã±ãŒã¹ãã«ããŒãããŸããã 誰ãããã®æ©èœã䜿çšããªãéããå®å®æ§ã¯å€±ãããŠããŸããã ãããã圌ããããã䜿çšããããšãéžæããå Žåã圌ãã¯ãããæšå¥šã«åããŠããããšãèªããªããã°ãªããŸããã
ããã¯ææžåãããŸããïŒ ãŠãŒã¶ãŒãããã°ã®ãããªããŒãžã«HTMLãé
眮ã§ããããã«ãããããªãã¯ãŒããã¬ã¹ã®ã¯ã©ã€ã¢ã³ãåŽãäœæããããšæããŸãã ããããããã€ãã®ã¢ãã«ãã€ã³ãã£ã³ã°ãèš±å¯ããã®ã¯æ¥œããã§ãããã ãã®ãœãªã¥ãŒã·ã§ã³ã¯è¯ãã§ããããããšãããããŒã§ããïŒ
https://stackoverflow.com/questions/46576727/angular-compile-and-create-components-at-runtime
ç§ã¯angularjsã䜿ãã®ã¯ç°¡åã ãšæããŸãã ãµãŒããŒã¹ã¯ãªããã®ã€ã³ãžã§ã¯ã·ã§ã³ãåé¿ããããã ãã«ãã¯ã©ã€ã¢ã³ãåŽã®ã¬ã³ããªã³ã°ãæ¢ããŠããŸãã
èå³ã®ããæ¹ã®ããã«ããããžã§ã¯ãã§ãã®åé¡ãã©ã®ããã«è§£æ±ºãããã説æããããšæããŸãã ãŸã£ããåãåé¡ããããŸãããHTMLãšCSSãWebAPIããååŸãããå®å
šã«åçã§ãã ãã«ããªããã£ãã€ã¶ãŒãã³ã³ãã€ã©ãŒããœãŒã¹ããåé€ãããããå®è¡æã«Angularã¢ãžã¥ãŒã«ãšã³ã³ããŒãã³ããã³ã³ãã€ã«ããå Žåã¯ãAOTãšbuildOtimizer: true
äž¡æ¹ã䜿çšããããšã¯ã§ããŸããã
ãã®ãããªåçãªãŠãŒã¹ã±ãŒã¹ã®ãµããŒãã¯å®éã«ã¯èšç»ãããŠããªãããã«æããããããAngularããã«ããå®å šã«æãåºããŸããã Webã³ã³ããŒãã³ããå®è£ ããŸããã Angular Elementsããã®ä»ã®ãã¬ãŒã ã¯ãŒã¯ã§ã¯ãªããããããå Žæã§å®è¡ãããŠãããã¬ãŒã³ãªãã©ãŠã¶ãŒWebã³ã³ããŒãã³ãã§ãã HTMLãšCSSãããã€ãã®ãã€ã³ãã£ã³ã°æ å ±ãšäžç·ã«åãåããŸãã Webã³ã³ããŒãã³ãã¯ãã¢ããªã±ãŒã·ã§ã³ãšã³ã³ããŒãã³ãã®ã¹ã¿ã€ã«ãåé¢ããããã«ãæ°ããã·ã£ããŠDOMãéãããšãã§ããŸãã ãã®ããã«ããŠãçä¿¡CSSãŸãã¯HTMLãã¢ããªãå£ãããšã¯ãããŸããã
çµå±ãç§ã¯ç§ããªãããã£ããšããã§ãïŒAOT +ããŒã¿ãã€ã³ãã£ã³ã°ãå«ãå®è¡æã®WebAPIããã®Angularããã€ãããã¯HTMLããã³CSSã®ãã«ããªããã£ãã€ã¶ãŒã Angularã³ã³ãã€ã©å šäœãã©ã³ã¿ã€ã ã«ããã¯ããå¿ èŠã¯ãããŸããã ãŸããã©ã³ã¿ã€ã ããäžèŠãªjsã2 MBåé€ããã ããªã®ã§ãã¯ããã«é«éã§ãã
èå³ã®ããæ¹ã®ããã«ããããžã§ã¯ãã§ãã®åé¡ãã©ã®ããã«è§£æ±ºãããã説æããããšæããŸãã ãŸã£ããåãåé¡ããããŸãããHTMLãšCSSãWebAPIããååŸãããå®å šã«åçã§ãã ãã«ããªããã£ãã€ã¶ãŒãã³ã³ãã€ã©ãŒããœãŒã¹ããåé€ãããããå®è¡æã«Angularã¢ãžã¥ãŒã«ãšã³ã³ããŒãã³ããã³ã³ãã€ã«ããå Žåã¯ãAOTãš
buildOtimizer: true
äž¡æ¹ã䜿çšããããšã¯ã§ããŸããããã®ãããªåçãªãŠãŒã¹ã±ãŒã¹ã®ãµããŒãã¯å®éã«ã¯èšç»ãããŠããªãããã«æããããããAngularããã«ããå®å šã«æãåºããŸããã Webã³ã³ããŒãã³ããå®è£ ããŸããã Angular Elementsããã®ä»ã®ãã¬ãŒã ã¯ãŒã¯ã§ã¯ãªããããããå Žæã§å®è¡ãããŠãããã¬ãŒã³ãªãã©ãŠã¶ãŒWebã³ã³ããŒãã³ãã§ãã HTMLãšCSSãããã€ãã®ãã€ã³ãã£ã³ã°æ å ±ãšäžç·ã«åãåããŸãã Webã³ã³ããŒãã³ãã¯ãã¢ããªã±ãŒã·ã§ã³ãšã³ã³ããŒãã³ãã®ã¹ã¿ã€ã«ãåé¢ããããã«ãæ°ããã·ã£ããŠDOMãéãããšãã§ããŸãã ãã®ããã«ããŠãçä¿¡CSSãŸãã¯HTMLãã¢ããªãå£ãããšã¯ãããŸããã
çµå±ãç§ã¯ç§ããªãããã£ããšããã§ãïŒAOT +ããŒã¿ãã€ã³ãã£ã³ã°ãå«ãå®è¡æã®WebAPIããã®Angularããã€ãããã¯HTMLããã³CSSã®ãã«ããªããã£ãã€ã¶ãŒã Angularã³ã³ãã€ã©å šäœãã©ã³ã¿ã€ã ã«ããã¯ããå¿ èŠã¯ãããŸããã ãŸããã©ã³ã¿ã€ã ããäžèŠãªjsã2 MBåé€ããã ããªã®ã§ãã¯ããã«é«éã§ãã
ããã«ã¡ã¯ãããã®äŸã¯ãããŸããïŒ ããããšã
ã©ããïŒ ç§ã¯çŸåšããã¹ãŠã®è©³çŽ°ã説æããæéããªãã®ã§ãããã«çç·šå°èª¬ããããŸãïŒ
init()
ãšupdate()
ã¯Angularã«ãã£ãŠåŒã³åºãããŸãã ã¹ãã³ã¿ã°ã®é
åã¯ãããŒã¿ãã€ã³ããããã¹ãã§ãã 確ãã«ãã³ã³ããŒãã³ãã®å€éšã§ããã€ãã®ãã³ãã¬ãŒã解æãè¡ãããŠããã®ã§ãå€ãforã«ãŒãããŠã¹ãã³ã«å
¥ããããšãã§ããŸããã次ã®äŸã§ã¯ãåºæ¬çãªèãæ¹ãç解ããå¿
èŠããããŸãã ãããŠããŠã£ã³ããŠã«ã«ã¹ã¿ã Webã³ã³ããŒãã³ããç»é²ããããšãå¿ããªãã§ãã ãã...
export class TemplateContentWebComp extends HTMLElement {
private tplDiv: HTMLDivElement;
private tplSpans: Array<HTMLSpanElement> = new Array<HTMLSpanElement>();
public init(templateCss: string, templateHtml: string): void {
const template: HTMLTemplateElement = document.createElement('template');
const css: string = `<style>:host { flex: 1; display: flex; flex-direction: column; } .tpl { flex: 1; box-sizing: border-box; }${!String.isNullOrWhiteSpace(templateCss) ? (' ' + templateCss) : String.empty()}</style>`;
const html: string = `<div class="tpl">${!String.isNullOrWhiteSpace(templateHtml) ? (' ' + templateHtml) : String.empty()}</div>`;
template.innerHTML = `${css} ${html}`;
this.attachShadow({ mode: 'open' });
this.shadowRoot.appendChild(template.content.cloneNode(true));
this.tplDiv = this.shadowRoot.querySelector('div.tpl');
const spans: NodeListOf<HTMLSpanElement> = this.shadowRoot.querySelectorAll(`span[data-var]`);
if (spans != null && spans.length > 0) {
spans.forEach(span => this.tplSpans.push(span));
}
}
public update(isEditable: boolean, values: Array<string>): void {
if (this.tplDiv != null) {
if (isEditable) {
this.tplDiv.removeAttribute('tpldisabled');
} else {
this.tplDiv.setAttribute('tpldisabled', '');
}
}
for (let i = 0; i < this.tplSpans.length; i++) {
this.tplSpans[i].innerHTML = values[i];
}
}
}
ãã®ã³ã¡ã³ããèªãã§ããã®åé¡ãããã§éããããšãã§ãããšæããŸãð
https://github.com/angular/angular-cli/issues/17663#issuecomment -705737272
ããã«ã¡ã¯ãç§ã¯ããªãé·ãéãè€æ°ã®ãã³ãã¬ãŒãã1ã€ã®ã³ã³ããŒãã³ãã«ããŒãããæ¹æ³ãæ¢ããŠããŸããã @ alert9kã®æçš¿ã®ãããã§ããããè¡ãæ¹æ³ãèŠã€ããããšãã§ããŸããã ãã¡ãããã³ã³ãã€ã©ãå¿ èŠãªãããæ¬çªã¢ãŒãã§èµ·åããããšã¯ã§ããªãããããã®æ¹æ³ã¯äžæçãªãã®ã«ãããŸããã
ãã®ãããäœã¶æãã®éããããè¡ãæ¹æ³ãæ¢ããŠããŸããããæ¬çªã¢ãŒãã§ããã
ä»ã«äœãèŠã€ãããªãã£ãã®ã§ãããã¯å®éã«ã¯åœ¹ã«ç«ã¡ãŸããã§ãããæåŸã®æ段ãšããŠãStackOverflowã§è³ªåãããšããã質åã«ããã€ãã®å ±å¥šéãè¿œå ãããæåŸã«è¿œå ãããšããããå®å
šã«å®è¡ã§ããåçãåŸãããŸããã
ãã¡ãããåå¥ã®ã¹ã¿ã€ã«ã·ãŒããå¿ èŠãªå Žåã¯ãããŒã¿ããŒã¹ããããŒãããåŸã§ã¹ã¿ã€ã«ã·ãŒããhtmlãã³ãã¬ãŒãã«è¿œå ããã ãã§ãåé¡ãªãæ©èœããŸãïŒãããããæåã§ã¯ãããŸããããæ©èœããŸãïŒã ãã¡ãããç§ã®è³ªåã«çãã人ã«ãã¹ãŠã®ã¯ã¬ãžãããäžããããã®ã§ããã®çããç§ã«ã¯ã¬ãžããããªãã§ãã ããã
@BillyCottrellããã¯ããªããåãã£ãŠç¥ã£ãŠããããšã«ãäŸåããŸãã ãã¹ãŠã®ãã³ãã¬ãŒããäºåã«ç¥ã£ãŠããå Žåã¯ããã€ã§ãnode
ã¹ã¯ãªããïŒãŸãã¯åæ§ã®ãã®ïŒãå®è¡ããŠããããããã¹ãŠäžç·ã«è£éã§ããŸãã ng
ã䜿çšããŠãããçŽæ¥è¡ãæ¹æ³ã¯ãããããããå
¬éãããŠããWebpackã®ã»ãã®äžéšããããã³ã°ããŸãâŠ
@SamuelMarksã¯æ¬åœã§ãããããã¯ãµãŒããŒãããã³ãã¬ãŒãããªã¯ãšã¹ããããšãã«äœ¿çšã§ããŸããäŸã®innerHTMLã¯éåæã§åäœãããããäºåã«ãã³ãã¬ãŒããç¥ãå¿ èŠã¯ãªããäºåã«ããŒãããããšãã§ããŸãããµãŒããŒããããããèŠæ±ããå¿ èŠããªãã®ã§ããããããéãåäœãããã ãã§ãã ã¿ã€ããŒãã¹ã€ãããã³ãã¬ãŒããšçµã¿åãããããšãå¯èœã§ãã ããã¯ãç¥ã£ãŠããããšã«é¢ããããã³ãã¬ãŒããããŒãããç°¡åãªæ¹æ³ã§ãããå¿ èŠã«å¿ããŠåŸã§æŽæ°ããŠãå¥ã®ãã³ãã¬ãŒããŸãã¯æ°ããããŒãžã§ã³ã®ãã³ãã¬ãŒãã衚瀺ããããšãã§ããŸãã
ã€ãŸããæ¢ç¥ã®ãã³ãã¬ãŒãã䜿çšããŠãã³ãã¬ãŒããµãŒãã¹ãç°¡åã«äœæã§ãããšããããšã§ãã ãããã®ãã³ãã¬ãŒããããã«è¿œå ããå¿
èŠã«å¿ããŠãæ¢ç¥ã®ãã³ãã¬ãŒãã®1ã€ãéžæããããå¿
èŠã«å¿ããŠãµãŒããŒããæ°ãããã³ãã¬ãŒããè¿œå ããŸãã
è¡ãå¿
èŠãããã®ã¯ããµãŒããŒããã®èªäœãã³ãã¬ãŒããšããŠã®æ¢ç¥ã®ãã³ãã¬ãŒãã®äž¡æ¹ãå«ããµãŒãã¹ãããŒãããããšã ãã§ãã ããã¯ããµãŒããŒãããã³ãã¬ãŒããããŒãã§ããªãå Žåã«é©ããŠãããããæ¢ç¥ã®ãã³ãã¬ãŒãã®1ã€ã«ãã©ãŒã«ããã¯ã§ããŸãã ãããã£ãŠãããããã¯ããå¿
èŠã¯ãããŸããã
ãããäºåã«äœæããããã³ãã¬ãŒããããã§ã®éµã§ãã AOTãç¥ã£ãŠããå Žåã¯ãåè¿°ã®https://github.com/SamuelMarks/ng-md-components ïŒããŒã¯ããŠã³ãã³ãã¬ãŒãã䜿çšã§ããŸãïŒã®ããã«ã楜ããæéãéããããšãã§ããŸãã äŸåé¢ä¿ãã¢ããã°ã¬ãŒãããè€æ°ã®ãã³ãã¬ãŒããçµã¿åãããŠçµã¿åãããããã®ãµããŒããè¿œå ããã®ã¯ç°¡åã§ãïŒèª°ããæ°ã«ãããŠãããšä»®å®ããŸãããã 瀺ããŠãã ããïŒã
æãåèã«ãªãã³ã¡ã³ã
ãã³ãã¬ãŒãã¯çŸåšåçã§ã¯ãªãããšãç§ã¯ç¥ã£ãŠããŸãããããŠããã¯ç§ãæŠèª¬ããããã«èŠçã§ãã åãããžãã¯ã§2ã€ããã以äžããŸãã¯æ°çŸã®ã³ã³ããŒãã³ããå®è£ ããããããŸããã
ã ããç§ã¯ãã®æ©èœããªã¯ãšã¹ãããŸãïŒ