ç§ã¯Angular2ãæãäžããŠããŠãç¹å®ã®çš®é¡ã®ã³ã³ããŒãã³ããæ¡åŒµããããã®æœåšçãªé害ã«ééããŸããã
次ã®äŸã§ã¯ããã¿ã³ã³ã³ããŒãã³ããšãã¿ããã€ãã³ãã«åºã¥ããŠã¹ã¿ã€ã«ãé©çšãããã£ã¬ã¯ãã£ãããããŸãã ãŸã£ããåãã¿ããåäœãç¶æ¿ãããã¿ã³ä»¥å€ã«ããä»ã®å€ãã®ãªããžã§ã¯ãããããŸãã ç§ã¯èªåã®éžæè¢ã暡玢ããŸããããéæ¹ã«æ®ããŠããŸãã
æ ¹æ§ãæ·±ãæãäžããããšãªããcomponentMetadataã¯ã³ã³ããŒãã³ãã®ã³ã³ãã€ã«æã«å©çšå¯èœã§ããããã¹ãããããã£ãã¹ãã£ã³ããŠãåçã«è¿œå ãããšåæã«ã³ã³ãã€ã«ã§ããè¿œå ã®ãã£ã¬ã¯ãã£ããæ¢ãããšãã§ãããšæããŸãã ããã«ãããè§åºŠã®ããæ¹æ³ã§ããã¯ã¹ã€ã³ãè¡ãããšãã§ããŸããã€ãŸããæ§æå¯èœãªãã£ã¬ã¯ãã£ãã䜿çšããŠæ©èœãæ¡åŒµãããã¥ãŒã®æ圱ãå£ãããšãªããããè¡ãããšãã§ããŸãã 以äžã®çãäŸã
çŸåšã®åäœ
componentMetadata.hostã§ãã£ã¬ã¯ãã£ãã宣èšãããšãããã¯éåžžã®å±æ§ãšããŠæ±ãããŸã
æåŸ
ããã/æãŸããåäœ
ãã¹ãã§å®£èšããããã£ã¬ã¯ãã£ãã¯ãã³ã³ãã€ã«æã«åŠçãããŸãã
/**
* App
*/
@Component({
selector: 'app-component',
template: '<g-btn>TEST</g-btn>',
directives: [gBtn, gTouch]
})
export class AppComponent {
constructor() {
}
}
/**
* Touch Directive
* Will be used in lots and lots of components
*/
@Directive({
selector: '[g-touch]',
host: {
'(touchstart)': '...',
'(touchend)': '...',
'(touchmove)': '...',
'(touchcancel)': '...'
}
})
export class gTouch {
constructor() {
}
}
/**
* Simple button component
*/
@Component({
selector: 'g-btn',
template: '<ng-content></ng-content>',
host: {
'role': 'button',
// WOULD LOVE FOR THIS TO COMPILE THE DIRECTIVE!
// right now it just adds an attribute called g-touch
'g-touch': ' '
}
})
export class gBtn {
constructor() {
}
}
ãããã©ã®ããã«æ©èœãããã«ã€ããŠã®ããã€ãã®ã¢ã€ãã¢ïŒ
// Option 1: just scan the host properties for directives.
// This would be my ideal, simple and understandable
@Component({
selector: 'g-btn',
template: '<ng-content></ng-content>',
host: {
'role': 'button',
'g-touch': true // or {prop: 'foo'} or string
}
})
// Option 2: definitely more declarative using a hostDirectives property
// more declarative, albeit more annoying to have to reimport the touch class
@Component({
selector: 'g-btn',
template: '<ng-content></ng-content>',
hostDirectives: gTouch,
host: {
'role': 'button',
'g-touch': true
}
})
// Option 3: declare host directives as its own thing, still just
// use keys pointing to bool, obj, or string
@Component({
selector: 'g-btn',
template: '<ng-content></ng-content>',
hostDirectives: {
'g-touch': {someOption: someOption}
},
host: {
'role': 'button',
}
});
// Option 4: Not a huge fan of this one, but understandable if
// people want to keep one host property
@Component({
selector: 'g-btn',
template: '<ng-content></ng-content>',
host: {
'role': 'button',
_directives: {
'g-touch': true
}
}
});
ã¿ããªããããšããAngular 2ã¯èŠæ ããããã§ãïŒã 足ããªããã®ãããã°æããŠãã ããã
ç§ã¯çŸåšå€§èŠæš¡ãªã¯ã©ã€ã¢ã³ããéçºããŠãããããGUIã«é¢é£ãããã¹ãŠã®åé¡ãåå©çšå¯èœãªAngular2ãã£ã¬ã¯ãã£ãã«å解ããããšããŠããŸãã ãžã§ãŒã ãºãå®å
šã«ææããããã«ãããã¯åžžã«ç§ã«åãåé¡ãåŒãèµ·ãããŸãã
ããã¯ãåªããã¢ãžã¥ã©ãŒããã³åçã¢ãŒããã¯ãã£ãŒã®ããã«ãå®éã«äœããã®åœ¢ã§æ©èœããå¿
èŠããããŸãã ã¿ããã®äŸã¯ããããå¿
èŠãªå€ãã®ã·ããªãªã®1ã€ã«ãããŸããã äŸïŒãã©ãã°ã¢ã³ãããããããµã€ãºå€æŽèŠ³å¯ãªã©ãªã©ã
ãã©ã³ã«ãŒãšããŠå¥ã®äŸãäœæããŸããïŒ
https://plnkr.co/edit/J65THEMic0yhObt1LkCu?p=info
ãã®æ©èœãããã«è¿œå ãããå¯èœæ§ã¯ãããŸããïŒ
ããã«é¢é£ããStackOverflowã®è³ªåã¯æ¬¡ã®ãšããã§ãïŒ http ïŒ
@ Andy1605ãããåé¿ããæ¹æ³ãèŠã€ããããšããããŸããïŒ ãããåå ã§ãRCäžã«NG2ã䜿çšããããã«ããŒãã«ãäœæããŸããã ãããåãæ»ãããã®ã§ããããã®ç¹å®ã®åé¡ã«ãããæ¡åŒµå¯èœãªUIãã¿ãŒã³ãæ§ç¯ã§ããŸããã
ãŸããAngularã«ã¯æ¬è³ªçãªæ©èœãæ¬ ããŠãããšæããŠããŸãã ã³ã³ããŒãã³ãããã®ãã¹ãã®ïŒè€æ°ã®ïŒå±æ§ãã£ã¬ã¯ãã£ãã宣èšã§ããå¿
èŠããããŸãã ãããã§ããªãããšããç§ã®ãããžã§ã¯ãã«ãšã£ãŠå€§ããªé害ã§ãã
ãããå°æ¥å®è£
ããããã©ããããŸãã¯ãããå®è¡ã§ããªãçç±ããããã©ãã誰ããç¥ã£ãŠããŸããïŒ
ãã®åé¡ã®è§£æ±ºçãïŒAngularããŒãžã§ã³1ã§ã¯ãããŸããïŒããã§ææ¡ããŸããïŒ https ïŒ
ç§ã®èãã§ã¯ãã³ã³ãã€ã«ãã¬ãŒã ã¯ãŒã¯ã«ã¯ããã£ã¬ã¯ãã£ããè¿œå ããæ©èœã ãã§ãªãããhostTransformsãïŒè§åºŠ1ã®å Žåã¯ãnodeTransformsãïŒãšåŒã°ããæ°ããæ¡åŒµãã€ã³ãããããå€æŽãããŠããªãããã£ã«ã¿ãªã³ã°ãããŠããªãã³ã³ããŒãã³ã宣èšã«ã¢ã¯ã»ã¹ã§ããŸãããŸããã³ã³ããŒãã³ããã³ã³ãã€ã©ãŒã«ãã£ãŠæåã«æ€åºãããDOMã«æ¿å ¥ããæºåãã§ããŠããå Žåã¯åžžã«ãå ã®ã³ã³ãã€ã«ãããŠããªãã³ã³ããŒãã³ããã¹ãããŒãã ãã®ããã«ããŠãéçºè ã¯ã«ã¹ã¿ã ããããã£ã䜿çšããŠã³ã³ããŒãã³ããã³ã¬ãŒã¿ãæ¡åŒµããnodeTransformsã䜿çšããŠãã³ã³ãã€ã«ã®çŽåã«ããããã®ã«ã¹ã¿ã ããããã£ãAngularãã¬ãŒã ã¯ãŒã¯ã䜿ãæ £ãããã®ã«å€æã§ããŸãã äŸã«ã€ããŠã¯ãæ©èœãªã¯ãšã¹ãã¹ã¬ããã確èªããŠãã ããã
ç§ã¯Angular2ãœãŒã¹ã³ãŒããããAngularãœãŒã¹ã³ãŒãã«ç²ŸéããŠããã®ã§ãå®è£ ããã»ã¹ãããã§åããã©ããã¯ããããŸããã ããããããã¯ããªã人æ°ã®ãããªã¯ãšã¹ãã®ããã§ãã®ã§ãAngular 2ã§å®è£ ãããŠããã¯ããŒããããããAngularjsã§å®è£ ãããŠãã©ã¯ãŒãããŒããããã®ãèŠãŠã¿ããã§ãïŒããã¯åé¡ã§ããïŒïŒã
+1
ç§ã¯åæããå¿ èŠããããŸãããã¹ãã«è²¢ç®ããå±æ§ãã£ã¬ã¯ãã£ããè¿œå ã§ããæ©èœã¯çŽ æŽãããã§ãããã ç§ã¯ä»ããã®ãããªæ©èœã䜿çšããŠãUIã³ã³ããŒãã³ãã«ãã©ãã°ã¢ã³ãããããæ©èœãè¿œå ãããããªããããè§åºŠã®ãããæ¹æ³ãå®è£ ã§ããããšãç¥ã£ãŠããŸãã
host
ã¡ã¿ããŒã¿ããããã£ã®ä»£ããã«ã³ã³ããŒãã³ãã®ãã³ãã¬ãŒãã«é©çšã§ãã<ng-container>
ãããªæ°ããã¿ã°ãäœæããã®ã¯ã©ãã§ããïŒ ãã£ã¬ã¯ãã£ãããã¹ãã³ã³ããŒãã³ãã«è¿œå ãããããšã瀺ã<ng-host [attributeDirective]>
ãããªãã®ã
@jjstreetããªãã®ææ¡ã¯ããã°ããåã«å»æ¢ãããreplace: true
ïŒæããã«åäžã§ã¯ãããŸããããé¡äŒŒããŠããŸãïŒã«äŒŒãŠããŸãã ããããããããreplace: true
ã¯ãããã§ã¯åœãŠã¯ãŸããªãçç±ã§éæšå¥šã«ãªããŸããã
@ pkozlowski-opensourceããã«ã€ããŠãng2ããŒã ããäœããã®åçãåŸãããšãã§ããŸããïŒ
ç§ã¯ãããéæããããã®ããããæ¹æ³ã®ããã®ã²ãŒã ã§ãã ã³ã³ããŒãã³ãã®ããŒã«ã«ã¹ã³ãŒãã«ã¢ã¯ã»ã¹ã§ããã³ã³ããŒãã³ãèªäœã«å±æ§ããã§ã«è¿œå ãããŠãããããhostããããã£ãææ¡ããŸããã ãã£ã¬ã¯ãã£ãã¯ããã®åäœã®èªç¶ãªæ¡åŒµã®ããã§ãã
+1ãã®æ©èœã¯ãUIã³ã³ããŒãã³ãã«ã¯ãªãŒã³ã§åå©çšå¯èœãªã³ãŒããå«ããããã«å¿ èŠã§ã
+1
ããã«ã€ããŠãng2ããŒã ããäœããã®åçãããã ããŸããïŒ ããªãããããããã€ããã¯ãªããšèšã£ãããããã¯è¯ãèãã§ãããçŸåšã®åªå äºé ã§ã¯ãªããšèšã£ããããã ãã§ããç§ã¯ããçš®ã®æèŠãèããããšæããŸãã
ãã®ããã®å¥ã®ãŠãŒã¹ã±ãŒã¹ãè¿œå ããããšæããŸãã ããã«ãããng2-mobxïŒhttps://github.com/500tech/ng2-mobxïŒãã©ããã³ã°ã³ã³ããŒãã³ããåãé€ãããããããã«èŠããããã«ãªããŸãã
ç§ãããã欲ããã§ãã çŸåšãã«ã¹ã¿ã routerLink
ãã£ã¬ã¯ãã£ããäœæããããã«å¿
èŠã§ãã è§åºŠã®ãããã®ãåå©çšããŠãmiãã£ã¬ã¯ãã£ãã«ãã£ãŠæºåããããã©ã¡ãŒã¿ãŒãæäŸããããšæããŸãã
ãããã£ãŠã <a [routerLink]="repeatedCodeToGetLink()">
代ããã«<a [myRouterLink]>
ããã解決ããããã©ã¡ãŒã¿ãŒã䜿çšããŠ[routerLink]
ãåçã«é©çšããŸãã
ããã®èŠéãã«æ¬åœã«è奮ããŠããŸãïŒ
ãã°ããã®éããããå¿ èŠã§ããã å®éãæªè§£æ±ºã®åé¡ãããããšã«æ°ä»ãå°ãåã«ãã¹ã¿ãã¯ãªãŒããŒãããŒã«ã€ããŠãæ¬è³ªçã«ãã®æ©èœã«ã€ããŠ
ãã®æ©èœã䜿çšããŠããã°ããéããŠããhttps://github.com/angular/flex-layout/issues/162ã解決ããæ¹æ³ã®è©³çŽ°ãªäŸã瀺ããŸããã ïŒããã®äŸãšèª¬æãåç §ããŠãã ããïŒ
ãã£ãŒãããã¯ããåŸ ã¡ããŠãããŸãããã®åé¡ã¯ããã®ãªããžããªã§æªè§£æ±ºã®åé¡ã®äžã§3çªç®ã«è©äŸ¡ãé«ãåé¡ã§ãã
/ cc @tbosch @IgorMinar @mhevery @jelbourn @hansl @ThomasBurleson
@jjstreetç§ã¯ããªãã®ææ¡ã ãšæããŸã
<ng-host myDirective="foo"></ng-host>
...ããã§èª¬æããŠããã®ãšã¯å¥ã®çç±ã§ãã°ããåã«äœæãããå¥ã®ææ¡ãšããŸãããã§ãããã
https://github.com/angular/angular/issues/7297ãåç §ããŠ
çŸåšã芪ã³ã³ããŒãã³ãã«ãã£ã¬ã¯ãã£ããè¿œå ããŠããã@ HostListenerã䜿çšããŠãã¹ãã«ãªã¹ããŒãè¿œå ããããšã§ããããåé¿ããŠããŸãã
Parent.html
<my-component myDirective>
Component.ts
@HostListener('myEvent')
handler() {
// do stuff
}
ãããããã¹ãã«çŽæ¥å±æ§ãè¿œå ã§ããã°ãããã¯ãªãŒã³ã«ãªããŸã...
ãããç§ãããã«å¯ŸåŠããŠããæ¹æ³ã§ããããã®æ©èœãå°äžããå®è£ ããããšãæåã®è§£æ±ºçã«ãªããšæ¬åœã«æããŸãã
AngularããŒã ããã®ããã«å¯Ÿããè¯å®çãŸãã¯åŠå®çãªã³ã¡ã³ããåŸ ã£ãŠããããšãæ¯æãç¥ããããŸãã
@ tbosch-ãã®åé¡ã®åªå
é äœã«é¢ããäžè¬ã®èãã @angular/flex-layout
ã«ã圱é¿ããŸãã
@fadzicãããè¡ãããšã§ããã£ã¬ã¯ãã£ãããã¹ãèŠçŽ ã«è¿œå ããã ãã§ã¯ãããŸãã...
Component.ts
@HostBinding('attr.myHilite') myHilite = new myHiliteDirective()
ãŸãã¯ãElementRefãRenderer2ãªã©ã®ãã©ã¡ãŒã¿ãå¿
èŠãªå Žåã¯ããã®ããã«ããŸã@HostBinding('attr.myHilite') myHilite = new myHiliteDirective(this.elementRef, this.renderer)
ãŸããhostèŠçŽ ã«ãã£ã¬ã¯ãã£ããè¿œå ããå¿ èŠãããããã®åé¡ã«ãªãã€ã¬ã¯ããããŸããã äžèšã®ã³ãŒãã䜿çšããŠãå¿ èŠãªããšãå®è¡ã§ããŸããã ç§ã¯Angularã䜿çšããå°é家ã§ã¯ãããŸãããã誰ãããã®ã¢ãããŒãã§åé¡ãæ±ããŠããå Žåã¯ããã®åé¿çã¯ä»ã®ãšããããŸãããããã§ãã ããããšãã
@btinocoã¯ãã©ã€ããµã€ã¯ã«ã¡ãœãããåŒã³åºãããªããã
@hccamposé ãäžããŠãããŠããããšãã è©Šãããšããããã£ã¬ã¯ãã£ãã®ngOnInit
ãå®è¡ãããªãã£ãïŒã³ã³ããŒãã³ãã§ãã£ã¬ã¯ãã£ããæåã§äœ¿çšããå Žåãé€ãïŒããã³ã³ããŒãã³ãã®ngOnInit()
ãã£ã¬ã¯ãã£ãã®ngOnInit()
ãåŒã³åºããŸããã ã æ¹ããŠãç¥ããããã ãããããšãããããŸãã
@ btinoco-ã¯ãã ããã¯åŸ®åŠã§ããåä»ãªåé¡ã§ãã @ angular / flex-layoutãæåŸ ãããã®ã¯ãŸããªãä¿®æ£ãããŸãã ;-)
ããã«é¢ããAngularããŒã ããã®ãã¥ãŒã¹ã¯ãããŸããïŒ çºè¡ãã1幎ãçµã¡ãŸãã...
ãã®åé¡ã«é¢ãããã®è©³çŽ°ãªèª¬æãèŠã€ããããšã¯éåžžã«ã¯ãŒã«ã§ããã
ãã®åŸãAngularããŒã ããã®ãã£ãŒãããã¯ãèŠã€ãããªãã£ãã®ã¯éåžžã«ã¯ãŒã«ã§ã¯ãããŸããã§ãã:(
ãã§ã«æ©èœããŠãããœãªã¥ãŒã·ã§ã³ã«ã€ããŠïŒ
ãã®æ©èœãªã¯ãšã¹ãã¯ãããã¯ã¹ã€ã³ã«éåžžã«ãã䌌ãŠããŸãã å®éã説æã®2çªç®ã®ç®æ¡æžã
ãã®æ©èœã®å®éã«ã¯å
¬åŒãšäžèŽããŸã
TypeScriptã®ããã¥ã¡ã³ãã«ã€ããŠã¯ããã¡ããã芧
è§åºŠã§ã¯ãããã¯å°ãæªåããŸããã @Input()
ã®ã¯ã©ã¹ãããã¯ã¹ã€ã³ãããšã
åºæ¬ã¯ã©ã¹ã§ããããå宣èšããå¿
èŠããããŸãã
ä»æ¥ãã§ã«æ©èœããŠãããã1ã€ã®è§£æ±ºçã¯ãã³ã³ããŒãã³ãã«ã©ãããŒèŠçŽ ãå«ããããã«ãã£ã¬ã¯ãã£ããé©çšããããšã§ãã
ããšãã°ãã³ã³ããŒãã³ãã«<wrapper g-touch>...
ãããªãã³ãã¬ãŒããå«ãŸããŠããå Žå
ãelementRef.nativeElementã§çŽæ¥ãµãŒãã¹ãä»ããŠãããè¡ããã«ããŒé¢æ°ãäœæãããã«ã€ããŠïŒ
ã¯ãããããè¯ãèãã®ããã§ãã ä»ã®ãšããWebWorkersã¯æ°ã«ããŸããã
ãããã¯ãŸã å®éšçã§ãããæ¬çªçšã®ããã€ãã®ãã倧ããªæ©èœãæ¬ ããŠããããã
ãããŠãWebWorkersã§åäœããã©ã€ãã©ãªã¯ã»ãšãã©ãããŸããã
ããšãã°ãDOMã«çŽæ¥ã¢ã¯ã»ã¹ãããããªã¢ã«ã©ã€ãã©ãªãåç
§ããŠãã ããã
ææ¡ã®ãªãã·ã§ã³1ïŒã«ã€ããŠïŒ
ãã¹ãããããã£ãã€ã³ãã£ã³ã°ã®çŸåšã®ã»ãã³ãã£ã¯ã¹ã¯ã
åºã«ãªãHTMLèŠçŽ ã«ããããã£myDir
ãèšå®ããããšã
ãã ãããã£ã¬ã¯ãã£ãã¯ãããŸããã ãã ãã host
ã§ããã£ã¬ã¯ãã£ããå°å
¥ã§ããå ŽåããŠãŒã¶ãŒã¯æ¬¡ã®ããã«æžãããšãã§ããŸãã
ãããŠããªãããããã£ã¬ã¯ãã£ãmyDir
ã®ããããã£ãæŽæ°ããªãã®ãæ··ä¹±ããã§ãããïŒ
@Component({
host: {
'[myDir]': true
},
template: '...'
})
class MyComp {}
ãªãã·ã§ã³1ïŒããã³ãªãã·ã§ã³3ïŒã«ã€ããŠïŒ
åãèŠçŽ ã®ãã£ã¬ã¯ãã£ãéã«ããçš®ã®host
ãã€ã³ãã£ã³ã°ãå°å
¥ãããšã次ã®ããšãå¯èœã«ãªããŸãã
ææ¡ã®ãªãã·ã§ã³2ïŒã«ã€ããŠïŒ
gTouch
ã¯ã©ã¹ãåç
§ããå¿
èŠãããã®ã¯å¥åŠã«æããŸãNgModule
ãä»ããŠããªã¬ãŒãããŸãã@ThomasBurlesonã¯ããŠãŒã¹ã±ãŒã¹ã«ã€ããŠãªãã©ã€ã³ã§è©³ãã話ããŸããã...
@tboschå¥ã®ãªãã·ã§ã³ãææ¡ããããšæããŸãããã€ãã£ãã®Angularã¿ã°ãå°å
¥ããããã<ng-host>
ãšåŒã³ãŸãããã
æ³šïŒ @mheveryã¯https://github.com/angular/angular/issues/7546ã§
<ng-host>
ã¿ã°ã®å°å ¥ãææ¡ããŸããããããã§ã¯åãã¿ã°åã䜿çšããŠããŸãããç§ã¯äœã§ããææ¡ã¯å¥åã®ãã®ã§ãããããã§æèµ·ãããåé¡ã«å¯ŸåŠããããšãç¹ã«æå³ããŠããŸãã
ng-host
ã¿ã°ã¯ãéåžžã®ãã£ã¬ã¯ãã£ã/ã³ã³ããŒãã³ãã¯ã©ã¹ãšããŠå®è£
ãããã®ã§ã¯ãªãã代ããã«ãéæ³ã®ããã¬ãŒã ã¯ãŒã¯ã³ãŒãã«ãªããŸã... ng-content
ã ng-container
ãªã©ã«äŒŒãŠããŸãã ãã
ã¿ã°ã¯ãcss :host
ã»ã¬ã¯ã¿ãŒã«é¡äŒŒããæ¹æ³ã§ãã³ã³ããŒãã³ããã¹ããžã®ããã€ã³ã¿ãŒããšããŠæ©èœããã ãã§ãã
ãããŸããªã·ããªãªãåé¿ããåã³ã³ããŒãã³ãã¯æ倧ã§1ã€ã®<ng-host>
ãããã¯ã®ã¿ãæã€ããšãã§ãããã®ã³ã³ããŒãã³ãã®ãã³ãã¬ãŒãã®ã«ãŒãã¿ã°/ããŒãã§ããå¿
èŠããããŸãã
ããããããã©ã®ããã«äœ¿ããã§ãïŒ
// Option 5: Use `<ng-host>`.. Very declarative and intuitive
@Component({
selector: 'g-btn',
template: `
<!--
Besides comments, having dom code inside the template but outside of a declared
ng-host code block would raise an error (hopefully at compile-time) .
-->
<ng-host role="button" g-touch>
<ng-content></ng-content>
</ng-host>
`
})
ã¡ãªã¿ã«@tboschãããã
ãã®æ©èœã«é¢ããä»ã®ãã¹ãŠã®äººã®èãã¯ã³ã³ããŒãã³ãã«åºæã§ããããããšããã£ã¬ã¯ãã£ãããã®ãã¹ãã«å¥ã®ãã£ã¬ã¯ãã£ããé©çšã§ãããã©ãããæå³ããããŸããïŒ ãã®åé¡ã®ãµãã¹ã¯ã©ã€ããéå§ãããŠãŒã¹ã±ãŒã¹ã«ã¯ãAïŒåŸã§å€æŽãããå Žåã«åããŠã³ãŒãããåé¢ããããBïŒè€è£œããã«åã€ã³ã¹ã¿ã³ã¹ã«ããã©ã«ãã®æ©èœãé©çšãããããšãããµãŒãããŒãã£ã®ãã£ã¬ã¯ãã£ããå«ãŸããŠããŸããã䜿çšãããã³ã«ã»ããã¢ããããŸãã
ããšãã°ãã¢ããªã±ãŒã·ã§ã³å šäœã®å€æ°ã®èŠçŽ ã«é©çšãããããŒã«ããããã£ã¬ã¯ãã£ãã§ãããã©ã«ãã§delayãšappendToBodyã䜿çšããŸãïŒäžå åãããæ§æãªããžã§ã¯ãããµããŒãããŠããŸããïŒã äžå€®ã®æ§æãªããžã§ã¯ãããµããŒãããŠããªãã£ãããã䜿çšãããã¹ãŠã®å Žæã«3ã€ãŸãã¯4ã€ã®å±æ§ãé 眮ããå¿ èŠããããŸããã ãã®åŸããã®ã©ã€ãã©ãªããé¢ããŠïŒMaterialããŒã«ãããã®äœ¿çšãéå§ïŒããã¹ãŠã®ããŒã«ããããæåã§äº€æããå¿ èŠããããŸããã ããããã©ãããããç¬èªã®ãã£ã¬ã¯ãã£ããäœæã§ãããšãããããã®ãã£ã¬ã¯ãã£ããå€æŽããŠãä»ã®ã©ã€ãã©ãªã§ã¯ãªããã¹ãã«[mdTooltip]ãé©çšããã®ãšåããããç°¡åã§ããã
@MikeMatuszç§ãããã念é ã«çœ®ããŠããããã§ããããã¯ã httpsïŒ //github.com/angular/flex-layout/issues/162#issuecomment-290350270ããã®ç§ã®ã¹ããããã§ãã
@Directive({
selector: 'fxLayoutFullPage',
hostDirectives: [LayoutDirective],
host: {
'fxLayout': 'column',
'style': 'min-height:100vh; background-color:yellow'
},
}) class LayoutFullPageDirective {}
ãã£ã¬ã¯ãã£ããã€ã³ã¹ã¿ã³ã¹åããããããã£ãã³ã¬ãŒã¿ãäœæããããšã¯å¯èœã§ããããïŒ
äŸãã°ïŒ
@HostDirective(LayoutDirective) myLayoutDirective: LayoutDirective;
ããã¯ãã³ã³ããŒãã³ããšãã£ã¬ã¯ãã£ãã§æ©èœãã察話çšã®ã€ã³ã¹ã¿ã³ã¹åç
§ãæäŸããã³ã³ããŒãã³ã/ãã£ã¬ã¯ãã£ãããç¶æ¿ãããšãã«å€±ãããããšã¯ãããŸããã
å
¥åãã€ã³ãã£ã³ã°ãšã€ãã³ããã€ã³ãã£ã³ã°ãæäŸããå Žåã¯ãããã«è€éã«ãªããšæããŸãã
ããã¯ã©ãã«ãããŸããïŒ ç§ã¯Angular2 / 4ã«ããªãæ £ããŠããŸãããç§ãããããã®ã¯ãä»ã®ããã€ãã®ãã£ã¬ã¯ãã£ããäžåºŠã«é©çšããã ãã®ãã£ã¬ã¯ãã£ããäœæããããšã§ãã ãã®ä»£ããã«ïŒ
<button directiveA directiveB directiveC>BUTTON TEXT</button>
ç§ã¯ãã æžãããšãã§ããŸãïŒ
<button customDirectiveABC>BUTTON TEXT</button>
ããã¯ç°¡åãªã¯ãã ãšæããŸã-åºæ¬çãªæ§æ/也ç¥ã ããããç§ãç¥ãéããããã¯äžå¯èœã§ããïŒ
@soynog ãç§ã¯ãŸã£ããåãããã«æããŸãã ãããã©ãã«ããã®ããç¥ãããã§ãã
ç§ã¯åçã«ãã£ã¬ã¯ãã£ããè¿œå ãããå Žæãç§ã¯ïŒè§åºŠ/çŽ æïŒ1206ã¯ãŸã ãµããŒããããŠããªãããïŒãã©ãã°å¯èœãªè§åºŠçŽ æã䜿çšããŠãã€ã¢ãã°ãšangular2-ãã©ãã°ãäœãããšãã§ããããã«æåŸ
ããŠããmd-dialog-container
ãšããMdDialog
ãµãŒãã¹ãäœæããŸãããåçãã£ã¬ã¯ãã£ãã®Angular1.xã³ã³ãã€ã©ãŒã®åäœãããã§ååŸããã®ã¯ã¯ããã«é£ããããã§ãã
@ tbosch ã @ ThomasBurleson ãããªãã話ãåã£ããªãã©ã€ã³ã®ãŠãŒã¹ã±ãŒã¹ã¯ãThomasãAngular / MaterialïŒ1206ã§å¶ç¶ã«æèµ·ããåé¡ãç®æšã«é¢é£ããŠããŸãããïŒ 1.6.xãã¬ãŒã ã¯ãŒã¯ãš2+ãã¬ãŒã ã¯ãŒã¯ã®éã®åäœã®å€åã«é ãæ©ãŸããããšããŠããŸãã
ãã®åé¡ã«é¢ããæŽæ°ã¯ãããŸããïŒ åœåã¯å¢ããå¢ããŠããŸãããããã泚ç®ãããŠããªããšæããŸãã
ãããããã«é¢ããæŽæ°ã¯ãããŸããïŒ
ããã¯ç§ãã²ã©ãå¿ èŠãšããŠãããã®ã§ãããã®ææ¡ã圌ã®äžæµã«å°éããããšãé¡ã£ãŠããŸãã
ããã¯çŽ æŽãããããšã§ãããä»æ¥ãããã°ã©ã ç/åçã«ãã£ã¬ã¯ãã£ããé©çšã§ããªãããšã«æ°ã¥ããæ²ãããªããŸããã
+1
ãããã ïŒïŒ
å¿
èŠãªãã¹ãŠãå®è¡ããã«ã¹ã¿ã ãã£ã¬ã¯ãã£ãã«ãã€ã³ãããè€æ°ã®ãã£ã¬ã¯ãã£ããã©ããããæ¹æ³ãæ¢ããŠããŸãã äŸãã° ââïŒ
<my-cmp [myDirective]="content"
[isOpen]="myCondition"
customProp2="customClass"
customProp1="customText">
...
</my-cmp>
ãã¹ãŠã®è¡ãã³ããŒããŠè²Œãä»ããããšãªãåå©çšã§ããããã«ããã¹ãŠãã©ãããããã£ã¬ã¯ãã£ããäœæã§ããã°äŸ¿å©ã§ãã
<my-cmp myCustomDirective>
</my-cmp>
ãããŠç§ã®ã«ã¹ã¿ã ãã£ã¬ã¯ãã£ãã«
<ng-host [myDirective]="content"
[isOpen]="myCondition"
customProp2="customClass"
customProp1="customText">
</ng-host>
ä»å·2åšå¹Žãè¿ããŸãïŒ æ£çŽãªãšããããã®æ©èœã¯éåžžã«äŸ¿å©ãªã®ã§ã100äžåã®ã©ãããŒãäœæããªããŠããéåžžã«æ§æããããã³ã³ããŒãã³ãããã£ã¬ã¯ãã£ããäœæã§ããŸãã æã£ãŠãããã£ã¬ã¯ãã£ãããå¿ èŠãªã³ã³ããŒãã³ããäœæããã ãã§ãã ã·ã³ãã«ãã¯ãªãŒã³ãå¹æçã
@ IgorMinar-ãšã«ãããä»åŸã®æ©èœåŒ·åã®ããã«ãã®æ©èœãã¬ãŒããŒã§ååŸã§ããŸããïŒ
ãã®ãããªæ©èœãæªããã¿ãŒã³ãšèŠãªããããã©ãããç¥ãããã®ã§ããã 誰ïŒ
@ darkbasic -AFAIUããã®æ©èœããªãå Žåãéçºè
ã¯ããã³ãã¬ãŒããã¥ãŒãšã³ã³ãã³ãã«èŠªãã£ã¬ã¯ãã£ããè¿œå ããããã«ãã©ãããŒèŠçŽ ïŒ ng-container
ïŒãå°å
¥ããå¿
èŠããããŸãã
ããããã©ãããŒã䜿çšããã«ç¬èªã®ã³ã³ããŒãã³ããå®å šã«å¶åŸ¡ã§ããããšã¯æªããã¿ãŒã³ã§ã¯ãªããšæããŸãã ããã¯å¿ éåã§ãã
@bradlygreenã³ã¡ã³ãã¯ãããŸããïŒ
ãã®æ©èœã¯ããã®ãªããžããªã®ãã¹ãŠã®æªè§£æ±ºã®åé¡ã®äžã§æã人æ°ã®ãããªã¯ãšã¹ãã§ãïŒããã5ã§ã¯ãªãã«ããŠãïŒ...ã€ã³ã¿ãŒãããå šäœã§ãäºå®äžã®ãã¬ãŒã ã¯ãŒã¯ãšããŠã®Angularã®è¡°éã«é¢ããã¬ããŒãïŒçµéšçããŒã¿ã«è£æã¡ãããïŒãèŠãããŸã...ç§ã¯æããŸãã³ãã¥ããã£ãèããŠããªããšããææ ãæšé²ããŠãããã®ã®1ã€ã 競äº; vue.jsãšreactã¯ãæã人æ°ã®ãããªã¯ãšã¹ããããã¢ã€ãã ã«ã€ããŠå°ãªããšãç¶ç¶çãªãã£ãŒãããã¯ãæäŸããããã«ãå¿ ããããã¹ãŠã®äººãæããã¹ãŠã®å°ããªããšãå®è£ ããŠãããšã¯éããªããããçå®ã«é²æ©ããè§åºŠãè¶ ããŠããŸãã é·ãéåŸ ã£ãŠäœãèãããªãã®ã¯ãšãŠãã€ã©ã€ã©ããŸããåçŽãªãããããç§ãã¡ã¯ãããããŸãããã§ãããããŸããã
ïŒ ãAngularslipsãJsãã¬ãŒã ã¯ãŒã¯ã®ã»ã¯ã·ã§ã³ãåç §ããŠãã ããïŒ
... Angular / Vue / React / ...ã«é¢ããããã€ãã®æèŠã¯ãããŸããŸãªèŠå ã®åœ±é¿ãåããŠãããšæããŸãã...ãã®å ·äœçãªæ©èœã¯ãäœããã®åœ¢ã§å®è£ ãã䟡å€ããããŸãïŒç¶æ³ãåãªãé©çšããããã£ã¬ã¯ãã£ãã®ç°¡åãªãªã¹ãã䜿çšãããœãªã¥ãŒã·ã§ã³ïŒ...ãããã£ãŠãAngularã³ã¢ããŒã ã®å ·äœçãªäœçœ®ã¯å€§æè¿ã§ã...ð¥
ç¹å®ã®ETAã¯ãããŸãããã2018幎ã®ã¬ã³ãã©ãŒã§ãã®ã«ããŽãªã®ãã®ãã¯ããã«ç°¡åã«ããããã«åãçµãã§ããŸãã
ããŸãããã°ã2018幎ã«ç©äºãåçã«è¯ããªãã§ããããç§ãã¡ã¯è² ããŠããŸã
èŠãïŒ
@somomboãã®èšäºã¯ãã£ãšåã«ã§ãããã§ããããšã確èªãããŸãã
å®éã«èªåã®äœåãç¥ã£ãŠãã人ã¯äœè ããããã£ãŠããã誰ã圌ãçå£ã«åãæ¢ããŠããŸããã§ããã
ãããã£ãŠãåé¡ã®äºå®ã¯ãããã§ã®ãã®åé¡ã¯ãAngularããŒã ã«ãšã£ãŠéåžžã«äœãåªå 床ã§ãããå®éãå¯èœãªéãäœãåªå 床ã§ãã
AngularHQã§å ¬éãããŠããåªå é äœãªã¹ããåç §ããŠãã ããïŒåé¡çªå·8785ãæ¢ããŠãã ããïŒ
ã³ã¡ã³ãã®æ°ã瀺ãããã«ããã®åé¡ãã³ãã¥ããã£ããå€ãã®è°è«ãšé¢å¿ãçã¿åºããã«ãããããããããã¯äºå®ã§ãã
ããªãããã®åé¡ãæ°ã«ãããŠããŠããããå®è£ ãããããšãæ¬åœã«æãã§ãã人ãªããåŸ ã€ä»£ããã«..æ£çŽãªãšãã_æœåšçã«æ±ºããŠ_ãããããããªãã¯å ¬åŒã®å¹Žæ¬¡è§åºŠèª¿æ»ã«èšå ¥ããŠãããªãããã®åé¡ã®ããã«æããŠããããšãç¥ãããããšãã§ããŸãåªå 床ãé«ãããå¿ èŠããããåŸã§ã§ã¯ãªãæ©ãå®è¡ãããããšã確èªããŠããã ããã°å¹žãã§ãã
AngularããŒã ãè¡ã£ããã¹ãŠã®çŽ æŽãããä»äºã«æè¬ããããšãå¿ããªãã§ãã ããïŒ
ãŸãããã®æ©èœã«æ祚ããããšæããŸãã ããã¯ããã®åé¡ãåé¿ããããšããå€ãã®æ²ãã¿ã®åå ãšãªã£ãŠããŸãã
@somomboã¯ãAngularHQã®åªå é äœããŸã èªã¿ãããªãã§ãã ããã åªå é äœã®å ¬åŒã¯å®å šã«ã¯å ·äœåãããŠããŸããã ããã¯èšã£ãŠããv6ãåºè·ãããåŸããã®æ©èœèŠæ±ãåæ€èšããå¿ èŠããããšæããŸãã ããã«åž¯åå¹ ããªããªãã®ã§ã¯ãªãããšæããŸããããã«åãçµããšãã³ã³ãã€ã©/ã³ã¢é åã§ãã§ã«é²è¡äžã®äœæ¥ãšç«¶åããããšã«ãªããŸãã
ããã¯è¿ éãªä¿®æ£ãªã¯ãšã¹ãã§ã¯ãããŸããã ãããé©åã«è¡ãã«ã¯ããªãã®åªåãå¿ èŠã ãšæããŸãããv6ã§åãçµãã§ããããšã§ããããã¯ããã«ç°¡åã«å®è£ ã§ããã¯ãã§ãã
@IgorMinar Ivyã®äœæ¥ã«ããããããããå®çŸå¯èœã«ãªããŸãã ããããã¯ããv6ãéããŸããã
@IgorMinarãš@mheveryç§ã¯ãããªãã®èããäœã§ãããããããŠãã®åé¡ãçºçããåã«æåã«äœãå¿ èŠãã«ã€ããŠããã®å ·äœçãªãã£ãŒãããã¯ãç§ãã¡ã«äžããŠãããããšã«ãç§ãã©ãã»ã©æè¬ããŠããããååã«åŒ·èª¿ããããšã¯ã§ããŸãããé©åã«å¯ŸåŠããã
çŽ äººã«ãšã£ãŠããã¯ã€ãã¯ãã£ãã¯ã¹ããšã¯äœããããã§ãªããã®ã¯å¿ ãããæ確ã§ã¯ãããŸããã ãã ããããã¯ã¯ã€ãã¯ãã£ãã¯ã¹ã¿ã€ãã§ã¯ãªããæ£ããå®è¡ããå¿ èŠããããšããäºå®ãé€ãã°ããããAngularã®äŸ¿å©ãªæ©èœã«ãªããšæããŠããããã«æãããããšãç¹ã«æè¬ããŠããŸãã
ããªãã¯ãšãŠãå¿ããããã¹ãŠã®åé¡ã«ãã®ããã«å¯Ÿå¿ããããšã¯ã§ããªãã§ãããã
ã§ãããããã€ã§ãå¿ããæè¬ããŠããŸãã ç§ãã¡ã¯è奮ããŠãããAngular v6以éã楜ãã¿ã«ããŠããŸãïŒ
çŽ æŽãããä»äºãããããšãïŒ
ã³ã³ããŒãã³ãã¯ã©ã¹ã«ãã£ã¬ã¯ãã£ãã¯ã©ã¹ãæ¡åŒµãŸãã¯å®è£ ãããããšãã§ããŸãã å éšã§ãã£ã¬ã¯ãã£ããé©çšããããšããŠããå Žåãããã¯ããããã³ã³ããŒãã³ãå ã®ããžãã¯ã§ããå¿ èŠããããŸãã
export class gBtn extends gTouch
@NateMay ãããã§ã¯åäžã®ã¯ã©ã¹ã®ã¿ãæ¡åŒµã§ããŸãã ãã®åé¡ã¯ããã£ã¬ã¯ãã£ãã䜿çšããè€æ°ã®æ©èœã®æ§æã«é¢ãããã®ã§ãã
@NateMayã«ã¯2ã€ã®åé¡ããããŸããã1ã€ã¯äŸåæ§æ³šå ¥ãç Žã£ãããšã§ãã
ç§ã®2ã»ã³ããè¿œå ããã ãã§ãã @ uirouter / angularã®ãã¹ããããç¶æ ã䜿çšããŠãAngularãMaterialãFlex-layoutãåãããã«ãã¬ã€ã€ãŒSPAãæ§ç¯ããŠããŸãã ãã®å Žåãflexãã£ã¬ã¯ãã£ããã³ã³ããŒãã³ãèŠçŽ ã«ç°¡åã«é©çšã§ããªãããšã¯éåžžã«å¶éãããŸãã
ãããã£ãŠããã®æ©èœã«æ祚ããŠãã ããã
ãã®è¿œå æ©èœã®+1
ng-container
ã«ãã£ã¬ã¯ãã£ããè¿œå ããããšã¯å¯èœã§ãããããã¯DOMã«ã¯è¡šç€ºãããŸããã
亀差ãªãã¶ãŒããŒAPIïŒèŠçŽ ããã¥ãŒããŒãã«åºå
¥ããããšãã«ã€ãã³ããçºçãããïŒã®ããã«ãããå¿
èŠã§ããã ç§ãæã£ãŠããintersector
æã£ãŠãããã£ã¬ã¯ãã£ãã enter()
ãšleave()
èŠçŽ ãèŠãã/é ããªã£ããšãã«ã€ãã³ããã ãã®APIãå
éšã§äœ¿çšããå¿
èŠãããç¹å®ã®ã³ã³ããŒãã³ãããããŸããããã³ãã¬ãŒãã«DIVãè¿œå ããããããŸããã§ããã
ã ããç§ãããããšã¯component.html
次ã®ããš
<ng-container intersector (enter)="weCameOnScreen()" (leave)="byeBye()">
... components normal template ...
</ng-container>
次ã«ã intersector.directive.ts
ãã£ã¬ã¯ãã£ãã³ã³ã¹ãã©ã¯ã¿ãŒãElementRef
æ¿å
¥ããŸãã
constructor(private intersectorElementRef: ElementRef) { ... }
éåžžã®DOMèŠçŽ ã®å Žåã¯intersectorElementRef.nativeElement
æäœããã ãã§ããã ng-container
ã®å ŽåãããŒãã¯å®éã«ã¯ã³ã¡ã³ãããŒãã§ãã ã ããç§ã¯ãããã³ã¡ã³ãã§ãããã©ããã確èªããããã§ããå Žåã¯ã¬ãã«ãäžããŸãã
public ngAfterViewInit(): void
{
// if the directive is applied to an ng-container must go a level up
this.domElement = (this.intersectorElementRef.nativeElement.nodeType == 8) ? this.intersectorElementRef.nativeElement.parentElement : this.intersectorElementRef.nativeElement;
registerIntersector(this.domElement ...);
ããã¯ãã¹ãŠã®ç¶æ³ã§æ©èœããããã§ã¯ãããŸããããä»ã®ãšããã¯åé¡ãããŸããã IVYã³ã³ãã€ã©ã§ã¯ãã³ã¡ã³ãã䜿çšããªããªã£ãå¯èœæ§ãããããããããæ©èœããªããªãå¯èœæ§ããããŸãã éèŠãªããšã¯ãDOMããŒãã§ããŸãã¯ãã£ã¬ã¯ãã£ãã®åœã®ã @HostBinding ããšããŠå¹æçã«äœ¿çšã§ããåäžã®ãã£ã¬ã¯ãã£ããããããšã§ããã
ãã£ã¬ã¯ãã£ããåçã«è¿œå ã§ããããšãæ¬åœã«æãã§ããŸããã äœã¬ãã«ã®ãã£ã¬ã¯ãã£ãããé«æ¬¡ãã®ããæœè±¡çãªãã£ã¬ã¯ãã£ãã«ã«ãã»ã«åã§ããããã«ããããšæããŸãã ç§ã¯ã¹ã¿ãã¯ãªãŒããŒãããŒã«ã€ããŠæ¬¡ã®è³ªåãããŸããããããŠç§ã¯ããã«å¯Ÿãã解決çãå°æ¥ãããã©ããçåã«æããŸããïŒ https ïŒ
@mheveryãèšã£ãããã«..ç§ãã¡ã¯æãåºãããªããã°ãªããŸãããããã§åœŒãã¯ãããå¿ããªãã§ãã ããð
ããã賌èªããŸãã ãŸããresolveComponentFactory / createComponentã§äœæããã³ã³ããŒãã³ãã«ãã£ã¬ã¯ãã£ããåçã«ã¢ã¿ããã§ããå¿ èŠããããŸãã
const componentFactory = this.componentFactoryResolver.resolveComponentFactory(componentItem.component);
const componentRef = viewContainerRef.createComponent(componentFactory);
(<DynamicComponent>componentRef.instance).data = componentItem.data;
(<DynamicComponent>componentRef.instance).cssClassList = componentItem.cssClassList;
// Add directive to new component here
// componentRef.addDirective(someDirective)
ãã¹ãŠã®ã¢ããããŒãïŒïŒïŒ
ãµãŒãããŒãã£ã®ãã£ã¬ã¯ãã£ãã䜿çšããŠããå¥ã®ãŠãŒã¹ã±ãŒã¹ã«ééããŸãã
ããã€ãã®ã·ããªãªã§ã¯ãHTMLèŠçŽ ã®ãã£ã¬ã¯ãã£ããåçã«åé€/è¿œå ããå¿
èŠããããŸãã
ããã¯äœããã®æ¹æ³ã§å¯èœã§ããããããšã解決çãä¿çããŠããŸããïŒ
@micronyks ...å®éã«ã¯ãã£ã¬ã¯ãã£ããåçã«è¿œå ããããšã¯ã§ããŸããã ãã®ãããªæ©èœãäœæããå¯èœæ§ãè¿œå ããIvyãåŸ ã€å¿ èŠããããŸãã
@ mlc-mlapisã§ãããIVYã¯ãã€æ¥ãäºå®ã§ããïŒ ã©ã®ããŒãžã§ã³ã§ïŒ
@micronyks ...ã¹ã±ãžã¥ãŒã«ã«ãã
ã¿ããªããã§åççã«ããŸããããAngular Teamã¯éåžžã«èŠæ±ãããŠããããã€ãã®å·šå€§ãªæ©èœïŒPWAãSSRãIvyããããŠç¹ã«ã«ã¹ã¿ã èŠçŽ ïŒã«äžçæžåœåãçµãã§ããŸããæåŸã®æ©èœã¯ç§ãç解ã§ããããã«éåžžã«åªå 床ã®é«ãæ©èœã§ã倧äŒæ¥ïŒãã€ã¯ããœãããªã©ïŒã®å€ããæ°žé ã«ãããæ±ããŠããŸããããããã«ã¯çç±ããããŸãã @mheveryãèšã£ãããã«ãå¹ççãªã«ã¹ã¿ã èŠçŽ ãå®çŸããã«ã¯ãIvyã
ãã®éããã®æ©èœãèŠæ±ãç¶ãã代ããã«ïŒç§ã絶æçã«å¿ èŠã§ãïŒãããŒã¿çã®ãã¹ãããã°ã®å ±åãããã¥ã¡ã³ãã®æ¯æŽãªã©ã«ãã£ãŠãAngularããŒã ãããã»ã¹ãå éããã®ãå©ããããšãã§ããŸãã
Angular Teamã¯ããã»ã©å€§ããã¯ãªãããã¹ãŠã®äººã®ããã«çŽ æŽããããã¬ãŒã ã¯ãŒã¯ãäœæããããšããŠããã®ã¯ã»ãã®æ°å人ã§ãããããã«ã¯æéããããããšãå¿ããªãã§ãã ããã
...ãããä»ã¯å°ãèŸæ±åŒ·ããIvyããã£ãšæäŒãããšãã§ããç¬éãŸã§åŸ ã€å¿ èŠããããŸã...ã³ã³ãã€ã©ãå®æããããã€ãã®è©³çŽ°ãªèšèšããã¥ã¡ã³ããå©çšå¯èœã«ãªããšãã
@avatsaevç§ã¯ããªããèšã£ããã¹ãŠã«åæããããšãã§ããŸãã ããã§ç©äºãèŠæ±ããã¹ãã§ã¯ãããŸããã ãã ããAngularã䜿çšãããšãã«å¯ŸåŠããŠããåé¡ã説æããããšã¯ã§ããŸãã
ç§ã¯éåžžã«çµéšè±å¯ãªAngularéçºè ã§ããããšã«ã»ã©é ãã§ãããããã€ãã®ããšãééã£ãŠãããšæããããååã«æ確ã«èª¬æãããŠããŸããã
ãªãŒã¯ã®ããæœè±¡åãè¡ããã«ããµãŒãããŒãã£ã®ã³ã³ããŒãã³ã/ãã£ã¬ã¯ãã£ããã«ãã»ã«åãããã®ã§ããã®åé¡ã«ééããŸããã ããã®äžéšã¯ãåçãªãã£ã¬ã¯ãã£ããæã€ããšãå¯èœã«ããããšã§ãã ç§ãé©ãããã®ã¯ããã®ãããªããšãéæããã®ã¯éåžžã«è€éã ãšããããšã§ãã
Angular MaterialãšFlex-Layoutã䜿çšããŠãã©ãŒã ãžã§ãã¬ãŒã¿ãŒãæ§ç¯ããŠããŸããããã¯ãJSONæ§æãååŸããŠãã©ãŒã ãçæããŸãã ãã®æ©èœã¯ãå®è¡æã«flex-layoutãã£ã¬ã¯ãã£ãããã¹ãã³ã³ããŒãã³ãã«é©çšããã®ã«åœ¹ç«ã¡ãŸãã Angularã®æ倧ã®è³ç£ã®1ã€ã¯ãæ§æããå®è¡æã«ã³ãŒããçæããæ©èœã§ãããšæããŠããŸããããã¯ããã®ã³ãŒããããçšéã®åºããã®ã«ããã®ã«å€§ãã«åœ¹ç«ã¡ãŸãã è¯ããŠãŒã¹ã±ãŒã¹ã«ç«ã¡å¯ãããã£ãã ãã§ãã ãã£ãã¡ ;ïŒ
ãããç§ã®æ£ç¢ºãªãŠãŒã¹ã±ãŒã¹ã§ã
@NateMayã¯ããã ãããªããããããã§ãã¯ã¢ãŠããããå Žåã¯ãç§ã®å®è£ ã
@NateMayã¯ããã ãããªããããããã§ãã¯ã¢ãŠããããå Žåã¯ãç§ã®å®è£ ã
説æããŠããããŸããïŒ ç§ã¯ããªããdynamic-field.directiveãæå³ãããšæããŸã
dynamic-field.directive
ã¯æŽŸæãªããšãããŸãããä»ã«ãããããã®ããšãèµ·ãã£ãŠããŸãã ã«ãŒããã©ã«ãã«CONTRIBUTING.md
ãè¿œå ããŸããããã®ãã©ã«ãã«ã¯ãããŒã«ã«ã§ã»ããã¢ããããæé ãèšèŒãããŠããŸãã æ°ãæéæ¬çªç°å¢ã«ãããã®ã§ã®äœ¿çšã«ã¯æ³šæããŠãã ããã å®å®ããå®è£
ã«åããŠå€§ããªå€åãéããŠããŸãã
+1
has-it
ãæ°ããã¡ã³ããŒããããã£ãã³ã³ããŒãã³ãã¯ã©ã¹å
ã®ãã®ãã£ã¬ã¯ãã£ããšããŠå®çŸ©ããã³ã³ã¹ãã©ã¯ã¿ãŒé¢æ°ãåŒã³åºããšãã«å¿
èŠãªãã¹ãŠã®ã³ã³ã¹ãã©ã¯ã¿ãŒåŒæ°ããã®ãã£ã¬ã¯ãã£ãã«æž¡ããŸãïŒäŸïŒElementRefãViewContainerRefãTemplateRef ...èŠæ±ããã泚å
¥å¯èœãªå€æ°ïŒ ãããã³çŸåšã®ã³ã³ããŒãã³ãã®å¯Ÿå¿ããã©ã€ããµã€ã¯ã«ã³ãŒã«ããã¯é¢æ°ã§ngInit()
ngAfterViewInit()
ããã«ãã©ã€ããµã€ã¯ã«ã³ãŒã«ããã¯ãããå Žåã¯æåã§åŒã³åºããŸãã@component(...)
class MyComponent {
theDirective: TargetDirective;
constructor(el: ElementRef) {
this.theDirective = new TargeDirective(el);
}
ngOnInit() {
this.theDirective.ngOnInit();
}
...
}
<ng-template><div targetDirective>....</div></ng-template>
ã次ã®ããã«ngAfterViewInit()
ã¬ã³ããªã³ã°ããŸããconst vf = this.viewContainerRef.createEmbeddedView(this.templateRef);
vf.detectChanges();
ãã®ããã«ããŠãAngularã¯ããã®ãã£ã¬ã¯ãã£ããšãDOMããªãŒã®å
ã®ã³ã³ããŒãã³ãèŠçŽ ã®çŽåŸã«ããã³ã³ããŒãã³ãã®å®éã®ã³ã³ãã³ããå«ãå¥ã®element
ãäœæããŸãã
<my-component></my-component>
<div targetDirective>....</div>
ãã®æ¹æ³ã¯ã <route-outlet>
ãè¡ãããšãšäŒŒãŠããŸãã
æãããªå¯äœçšããããŸã
ãããIvyã§å¯èœã«ãªã£ããã©ããã誰ãã確èªã§ããŸããïŒ ãããããªãã誰ããäŸãæã£ãŠããŸããïŒ
Angular Teamã¯ããã»ã©å€§ããã¯ãªãããã¹ãŠã®äººã®ããã«çŽ æŽããããã¬ãŒã ã¯ãŒã¯ãäœæããããšããŠããã®ã¯ã»ãã®æ°å人ã§ãããããã«ã¯æéããããããšãå¿ããªãã§ãã ããã
è²¢ç®è ã®ã³ãã¥ããã£ãæã€ããšã§ããã倧ãããªãå¯èœæ§ããããŸãã
ãã ããããã«å¯Ÿããè²¢ç®ãããä¿®æ£ãåãå ¥ããããå¯èœæ§ã¯éåžžã«äœãã§ãã
ãã®ä»£ããã«ãç§ãã¡ã¯åæ°äººã«æ»ã£ãŠããŸããã
ãããIvyã§å¯èœã«ãªã£ããã©ããã誰ãã確èªã§ããŸããïŒ ãããããªãã誰ããäŸãæã£ãŠããŸããïŒ
ãŸã èšèããªãã®ã§ãç§ãèŠã€ããæãè¿ããã®ãæäŸãããšæããŸãããããã¯ãIvyã§ããã¯ã¹ã€ã³ãå®è£ ããããšã«ã€ããŠã®ãã°ããåã®èšäºã§ãïŒ https ïŒ//blog.nrwl.io/metaprogramming-higher-order-components
èšäºã«ãããšããã®ã¹ã¬ããã®å ã®åé¡ã®å¯èœãªè§£æ±ºçã¯ããæ©èœããšåŒã°ããæ°ããæ©èœã䜿çšããããšã ãšæããŸãã
...ãã®æ©èœã«ã€ããŠGoogleã«äœããè©Šã¿ãã®ã¯å°ãæªå€¢ã ãšæ³åã§ããŸãã 圌ããããã«ããã€ãã®å ¬åŒã¢ã€ããŒããã¥ã¡ã³ãããªãªãŒã¹ããããšãé¡ã£ãŠããŸãïŒ :)
@nayfinã¯ããžã¥ã¢ã«ãã©ãŒã ãã¶ã€ããŒ/ãã«ããŒãæ§ç¯ããŠããŸã
ãããŠãäºå®ã«åºå·ããããã«æ°ã¶æåããåŸãåçã«è¿œå ãããdivã«ãã£ã¬ã¯ãã£ãããããã€ããæ¹æ³ããããŸãã....ããã€ãã®MyDirectiveFactory :: applyïŒHTMLElementïŒãåŒã³åºãã®ã¯ããã»ã©æ°ã«ããªãã¯ãã§ã
ãã®æ©èœã¯ããããã¬ãã«ã®ãã£ã¬ã¯ãã£ããæ·»ä»ããããã«åžžã«åäžã®div
ãäœæããŠããã®ã§ãå§åçã«æè¿ãããŸãã ããã«ãflex-layoutãã£ã¬ã¯ãã£ããå¿
èŠãªå Žåã¯ããã®1åéãã®divãäœæããå¿
èŠããããŸãããããè¡ã代ããã«ããã¹ãèŠçŽ ã«çŽæ¥ã¢ã¿ããã§ãããšäŸ¿å©ã§ãã
次ã®ãããªãã£ã¬ã¯ãã£ããåçã«è¿œå ã§ãããšéåžžã«äŸ¿å©ã§ãã
const msked = componentFactory.createDirective(MaskedInputDirective);
msked.textMaskConfig = {};
this.elementRef.directives.add(msked);
ããã«ãflex-layoutãã£ã¬ã¯ãã£ããå¿ èŠãªå Žåã¯ããã®1åéãã®divãäœæããå¿ èŠããããŸãããããè¡ã代ããã«ããã¹ãèŠçŽ ã«çŽæ¥ã¢ã¿ããã§ãããšäŸ¿å©ã§ãã
@tsteuwerãã€ã§ã
ããããããããã¹ãèŠçŽ ã«ãã£ã¬ã¯ãã£ããé©çšããæ©èœãå¿ èŠã§ãã ãã¹ãèŠçŽ ãã¹ã¯ããŒã«å¯èœã«ããAngular MaterialCDKããCdkScrollableãé©çšããã®ã«åœ¹ç«ã¡ãŸãã
ãããã¬ãã«ã®ng-templateå ã®ã³ã³ããŒãã³ããã³ãã¬ãŒãå ã®ãã¹ãŠãã©ãããŒããŸã
ããã«å°ãæ»ãããªä»£æ¿æ段ã¯ã httpsïŒ//github.com/trotyl/angular-contribã䜿çšããŠè¿œå ããããšã§ã
host: { ngNoHost: '' }
ãã®ãããžã§ã¯ãã¯ãã¬ã³ãã©ãŒãã·ã ãã芪ã®ãªãngNoHostå±æ§ãæã€èŠçŽ ã®åãã¬ã³ããªã³ã°ããŸãã
ãã¡ãããåãæ¬ ç¹ããããããããŸãã
æ®å¿µãªãããããã¯3幎çµã£ãŠããŸã éããŠããŸãã ãã¹ãèŠçŽ ã«ãã€ã³ãããããã£ã¬ã¯ãã£ãã¯ãã³ãŒãã®åå©çšæ§ãå®éã«åäžãããŸãã
ããã«ãflex-layoutãã£ã¬ã¯ãã£ããå¿ èŠãªå Žåã¯ããã®1åéãã®divãäœæããå¿ èŠããããŸãããããè¡ã代ããã«ããã¹ãèŠçŽ ã«çŽæ¥ã¢ã¿ããã§ãããšäŸ¿å©ã§ãã
@tsteuwerãã€ã§ã
ããããããããã¹ãèŠçŽ ã«ãã£ã¬ã¯ãã£ããé©çšããæ©èœãå¿ èŠã§ãã ãã¹ãèŠçŽ ãã¹ã¯ããŒã«å¯èœã«ããAngular MaterialCDKããCdkScrollableãé©çšããã®ã«åœ¹ç«ã¡ãŸãã
çæ³çã§ã¯ãããŸãããã次ã®ããã«ããã°ã©ã ã§CdkScrollableãäœæã§ããŸãã
this.scrollable = new CdkScrollableïŒthis.elementRefãthis.scrollDispatcherãthis.zoneïŒ;
this.scrollable.ngOnInitïŒïŒ;
ããªãããããæåã§ç Žå£ããªããã°ãªããŸããïŒ
ifïŒthis.scrollableïŒ{
this.scrollable.ngOnDestroyïŒïŒ;
}
https://github.com/angular/angular/issues/8785#issuecomment -361004682 IgorMinar Ivyã®äœæ¥ã«ããããããããå®çŸå¯èœã«ãªããŸãã ããããã¯ããv6ãéããŸããã
@mheveryã³ã¡ã³ãã®ãã©ããŒã¢ããïŒpoint_up_2ïŒãIvyãã€ãã«å®å šã«çéžããã®ã§ãv10ã®ãªãªãŒã¹æïŒãŸãã¯ãã以åïŒã«ãã®æ©èœã䜿çšã§ããŸããïŒ ããã§ãªãå Žåã¯ãä»ã®èæ ®äºé ããããããã«åŠšããå¯èœæ§ãããããšããç¥ãããã ããã
å€æŽã¯ãããŸããïŒ
ãã®ç¹å®ã®æ©èœãAngularãµãŒãã€https://twitter.com/angular/status/1252646001162088448?s=20ã«ãã£ãå Žåãããããããæ祚ã®ãšã³ããªã«ãªããšæããŸãã
äžäœã«æ祚ãããæ©èœã¯ãããããããŸããããã¯ç¢ºãã§ããã @output
ãä»ã®å€ãã®Observablesã䜿çšããŠããŸãã æ®å¿µãªãããçŸåšã®ããŒã¹ã§ã¯ããããã¯å®è£
ãããŸããã
ãã®ç¹å®ã®æ©èœãAngularã®èª¿æ»ã«ãã£ãå Žåãç§ã¯ããããããæ祚ã®ãšã³ããªã«ãªããšæããŸãã
çŽ æŽãããã¢ã€ãã¢@princemapleïŒ
çæ³çã§ã¯ãããŸããããããã¯å®éã«ã¯èª¿æ»ã®ãè¿œå ã³ã¡ã³ããã»ã¯ã·ã§ã³ïŒè³ªå2ïŒã§å¯ŸåŠã§ããŸãã
ãããèšããšããïŒ
"How else should we improve Angular for you?"
ãããã£ãŠãåºæ¬çã«ããã®æ©èœã®è¡šç€ºã«é¢å¿ã®ããæ¹ã¯ãã¢ã³ã±ãŒãã«åçããŠæ瀺çã«ãç¥ãããã ããããåé¡ïŒ8785ããå®è£ ããã³è§£æ±ºãããŠããããšã確èªããŠãã ããã
調æ»ãžã®çŽæ¥ãªã³ã¯ã¯æ¬¡ã®ãšããã§ãã
https://goo.gle/angular-survey-2020
åãããªããšå ±ã«ãããŸãããã«ïŒ ð
ç§ãããã°ã©ã ã§ã³ã³ããŒãã³ãã«æ©èœãè¿œå ããæ¹æ³ã«èŠåŽããŸãããæ£çŽãªãšãããããã§ã®ææ¡ã®ããã€ãã¯ããããã®ç¹å®ã®åé¡ã«åãçµãããã®æè¯ã®æ¹æ³ã®ããã«æããŸãã
ç§ã¯ãã®èšäºã«é¢ããŠè§åºŠã®ããããŒã ã¡ã³ããŒãšè©±ãããŸãã
ãããIvyã§å¯èœã«ãªã£ããã©ããã誰ãã確èªã§ããŸããïŒ ãããããªãã誰ããäŸãæã£ãŠããŸããïŒ
ãŸã èšèããªãã®ã§ãç§ãèŠã€ããæãè¿ããã®ãæäŸãããšæããŸãããããã¯ãIvyã§ããã¯ã¹ã€ã³ãå®è£ ããããšã«ã€ããŠã®ãã°ããåã®èšäºã§ãïŒ https ïŒ//blog.nrwl.io/metaprogramming-higher-order-components
ãããŠåºæ¬çã«ãããã¯Angularã®å éšããããã³ã°ããŠãããšããå°è±¡ã«ã€ãªãããŸãããå®éãããã¯éåžžã®ãŠãŒã¶ãŒæ¶è²»åãã«èšèšããããã®ã§ã¯ãããŸããã
ç§ãã¡ããããè¡ãããšãã§ããªãæè¡çãªçç±ãååšãããã©ããã¯ããããŸãããããããè¡ãèœåãããã°ãAngularã§æ¥ã ãåçã«æ¹åã§ãããšæããŸãã
ãç§ãã¡ã¯ã³ãã¥ããã£ãšã®ååãžã®æè³ãåçã«å¢ãããŸããã éå»3é±éã§ãæªè§£æ±ºã®åé¡ã®æ°ã¯ããã¬ãŒã ã¯ãŒã¯ãããŒã«ãããã³ã³ã³ããŒãã³ãå šäœã§700ãè¶ ããåé¡ãæžå°ããŸããã 2,000ãè¶ ããåé¡ã«è§ŠããŠãããä»åŸæ°ãæã«ããã£ãŠå€§èŠæš¡ãªæè³ãè¡ããã³ãã¥ããã£ãšååããŠããã«å€ãã®ããšãè¡ãäºå®ã§ããã â @StephenFluin
Angular10ã¢ããŠã³ã¹ãã
ã€ãŸããããã¯ããã®åé¡ãv11ã§è§£æ¶ãããããšãæå³ãããšæããŸããïŒ ð€ð
圌ãã®æãèŠæ±ãããæ©èœã®1ã€ãè¿œå ããããšã«åãçµããããããã³ãã¥ããã£ãšååãããïŒãããŠåœŒãããªã ããïŒããã®ããè¯ãæ¹æ³ã¯äœã§ããããïŒïŒ ïŒããðïŒ
ãã®äººéã®è©±ãèããŠïŒ
æåŸ ãèšå®ããããã ãã«ãããªããæ±ããŠããã®ã¯äºçŽ°ãªäœæ¥éã§ã¯ãªããçŸåšã®ããŒã¿æ§é ã¯å®éã«ã¯ãã®ããã«èšèšãããŠããŸããã ãããã£ãŠããã®ãããªãã®ããµããŒãããã«ã¯ãããã€ãã®äž»èŠãªãšã³ãžãã¢ãªã³ã°ãå¿ èŠã«ãªããŸãã
@mheveryãã³ãã¬ãŒãã®èŠªããããããé©çšããã®ãšã©ãéãã®ã§ããïŒ
@ k3nsei NgModule
芳ç¹ããèŠãå¿
èŠããããŸããããã¯ãå®éã«ã¯ããã¹ãŠã®ã³ã³ããŒãã³ãã®ã€ã³ãã©ã¹ãã©ã¯ãã£ãäœæããéèŠãªèŠçŽ ã§ãã
@ mlc-mlapis @HostBindingãš@HostListenerãããã®ã§ããããã@HostDirectiveããã®æ©èœã«é©ããŠããŸãã Ivyapisããã®ãããªæ©èœãå¯èœã«ãããšãã話ãèŠãããšããããŸãã
ç§ã«ãšã£ãŠéèŠãªç¹ã¯ãåå©çšå¯èœãªæ©èœã®ãžã£ã³ã¯ãåããæ¡åŒµæ©èœ/ç¹æ§ãæã€æ©èœãåãããããåé¢ãããã¯ã©ã¹ãæã€ããšãå¯èœã«ããããã€ãã®æ§æAPIãæã€ããšã§ãã ããšãã°ãéžæå¯èœãæ¡åŒµå¯èœ/æãããã¿å¯èœã®ããã«ã
@ k3nseiå¯èœæ§ã¯ãããŸãããåçãããªããã©ããã¯
ãæåŸ ãèšå®ããã ãã§ãããªããæ±ããŠããã®ã¯äºçŽ°ãªäœæ¥éã§ã¯ãªããçŸåšã®ããŒã¿æ§é ã¯å®éã«ã¯ãã®ããã«èšèšãããŠããŸããããããã£ãŠããã®ãããªãã®ããµããŒãããã«ã¯ãããã€ãã®äž»èŠãªãšã³ãžãã¢ãªã³ã°ãå¿ èŠã«ãªããŸããã â https://github.com/angular/angular/issues/8785#issuecomment -654391378
@mheveryã®ã¿ã€ã ãªãŒãªè¿ä¿¡ããããšãããããŸãã
ãããéåžžã«å€§ããªææŠã«ãªãããšã¯ç§ãã¡ã«ãŸã£ãã倱ãããŠããªããšèšã£ãŠãç§ã¯ã³ãã¥ããã£ã®ããã«è©±ãã€ããã ãšæããŸãã ããã§ãªããã°ããããé©åã«ïŒã©ããããããïŒå®çŸãããµãŒãããŒãã£ã®ã©ã€ãã©ãªãããã€ãäœæããŠããã¯ãã§ãã [ç§ã®ç¥ãéããäœããããŸãã]ã
ãŸããèšããŸã§ããããŸããããããã«è²¢ç®ããããã«ç§ãã¡ãæ¯æŽã§ãããã¶ãäžãã£ãŠããæç©ïŒãŸãã¯ãã®ä»ïŒããããã©ããããç¥ãããã ããã
ç§ãã¡ã¯å¿ããæè¬ããããªãã®çå£ãªã³ãã¥ãã±ãŒã·ã§ã³ã倧åã«ããç§ãã¡ãå¿ èŠãªãã®ãšè¿œå ããçŸå®ç/å®çšçãªãã®ã«ã€ããŠã®å¯Ÿè©±ã®äžéšã§ããç¶ããããšãé¡ã£ãŠããŸãã
ç§ã®ç解ã§ã¯ãã¢ã€ããŒã¯ããã以åããç°¡åã«ããŸãã
@mhevery
@IgorMinar Ivyã®äœæ¥ã«ããããããããå®çŸå¯èœã«ãªããŸãã ããããã¯ããv6ãéããŸããã
ç§ã®ç解ã§ã¯ãã¢ã€ããŒã¯ããã以åãããç°¡åã«ããŸã
ç§ã®æ°ããç解ã¯ãç°¡åãã¯ãŸã ãç°¡åããæå³ãããã®ã§ã¯ãããŸãã
ç§ã®æ°ããç解ã¯ãç°¡åãã¯ãŸã ãç°¡åããæå³ãããã®ã§ã¯ãããŸãã
ã¢ã€ããŒïŒããªãã2幎éè²»ããããã®ã§ããŸã æã人æ°ã®ããAngularã®åé¡ã®ãããã«ã察åŠããŠããŸããã
ã¢ã€ããŒïŒããªãã2幎éè²»ããããã®ã§ããŸã æã人æ°ã®ããAngularã®åé¡ã®ãããã«ã察åŠããŠããŸããã
@pauldraperãã®ç¹å®ã®åé¡ã¯åœŒãã®ã¬ãŒããŒã«ãèŒã£ãŠããªãã®ã§ãç§ãã¡ã®åé¡ã¯åœŒãã®ãåé¡ãã§ã¯ãªããšæããŸãïŒããŒããããhttps://angular.io/guide/roadmapãåç §ïŒã
å人çã«ç§ã®ããã«ãç§ã¯ç§ããªãŒãã³ãœãŒã¹ãããã®æ¹åã³ãã¥ããã£ïŒãŠãŒã¶ãŒïŒã«æ¬åœã®åœ±é¿åãæã£ãŠãããããžã§ã¯ãã ãã§ãªããã®ãããžã§ã¯ãã®ããã«ä»ã®å Žæã§æ€çŽ¢ããããã«ããã®æéãèããŸãã
@pauldraperãã®ç¹å®ã®åé¡ã¯åœŒãã®ã¬ãŒããŒã«ãèŒã£ãŠããªãã®ã§ãç§ãã¡ã®åé¡ã¯åœŒãã®ãåé¡ãã§ã¯ãªããšæããŸãïŒããŒããããhttps://angular.io/guide/roadmapãåç §ïŒã
@somomboãã®åé¡ãäœå¹Žã«ã
ããŒããããã®æåã®ãã€ã³ãã¯ããªãŒãã³ãªgithubã®åé¡ã®åŠçã«ã€ããŠæ確ã«è¿°ã¹ãŠããŸãã ããããã¹ãŠãããŒããããã«ãªã¹ãããããšã¯ããŸãæå³ããããŸãããã ãã®åé¡ã¯æãè³æãããïŒãŸãã¯æãè³æãããïŒåé¡ã®1ã€ã§ãããæçµçã«è§£æ±ºãããããšãé¡ã£ãŠããŸãã
ããããããã¯åãªãåžæç芳枬ã§ããhttpsïŒ//github.com/angular/angular/issues/5689ãèªãã§
@pauldraperãã®ç¹å®ã®åé¡ã¯åœŒãã®ã¬ãŒããŒã«ãèŒã£ãŠããªãã®ã§ãç§ãã¡ã®åé¡ã¯åœŒãã®ãåé¡ãã§ã¯ãªããšæããŸãïŒããŒããããhttps://angular.io/guide/roadmapãåç §ïŒã
@somomboãã®åé¡ãäœå¹Žã«ã
ãã¹ãŠåã..ç§ã¯åŸ ã£ãŠããŸãã..ãã®åé¡ã¯æåéãç§ã«ãšã£ãŠå€§ããªé害ãšãªã£ãŠããŸãã ã§ããããããã«èšç»ãããŠããããã«ã¯èŠããªããšããäºå®ã¯ãç§ãå人çã«å ã«é²ãæãæ¥ãããšãæå³ããŸãã ä»ã®ã¿ããªã«å¹žéãç¥ããŸãã
ãããããã£ã¬ã¯ãã£ããžã®ãã£ã¬ã¯ãã£ãè¿œå ã®ãµããŒããã«ååãå€æŽããŠã»ããã ãã®ååã¯çŽãããããããããŸãããããã®æ©èœãã³ã³ããŒãã³ãã«éå®ãããã®ã§ã¯ãªãããã£ã¬ã¯ãã£ãã§æ©èœããããšãéèŠã ãšæããŸãã ãã®æ©èœã®ä»ã®ååã¯ããæé»ã®ãã£ã¬ã¯ãã£ãããŸãã¯ãã¢ã¿ããããããã£ã¬ã¯ãã£ããã§ããå¯èœæ§ããããŸããã€ãŸãããã³ãã¬ãŒãã§ç¹å®ã®ã³ã³ããŒãã³ããŸãã¯ãã£ã¬ã¯ãã£ãã䜿çšãããšããã¹ãèŠçŽ ã®æé»/ã¢ã¿ããããããã£ã¬ã¯ãã£ãããã«ãããŸãã
äž»ã«ãç¶æ¿ãšæ¯èŒããŠãæ§æãAngularã§ã®åå©çšã®ããã¯ãªãŒã³ãªåœ¢åŒã§ããå¯èœæ§ãããããããããäœåºŠãæãã§ããŸããã ç¶æ¿ã¯ãå€éç¶æ¿ããªããã³ã³ã¹ãã©ã¯ã¿ãŒãã©ã¡ãŒã¿ãŒãæž¡ãå¿ èŠããããäžéšã®Angularæ©èœã¯ç¶æ¿æã«æ©èœãããã®ä»ã¯åãªãŒãã¯ã©ã¹ã§ãåæ¥ç¶ãããå¿ èŠããããããäžæ Œå¥œã«ãªãå¯èœæ§ããããŸãã
ãæé»ç/ã¢ã¿ããããããã£ã¬ã¯ãã£ãããã³ã³ããŒãã³ãããŒã«ã«ãŸãã¯ãã£ã¬ã¯ãã£ãããŒã«ã«åœ¢åŒã®ãã£ã¬ã¯ãã£ãã€ã³ã¹ã¿ã³ã¹åã®ããã«æ©èœããããšãæ³åããŸããããã«ããããã£ã¬ã¯ãã£ãã»ã¬ã¯ã¿ããã³ãã¬ãŒãããŒã¯ã¢ããã«ååšããªããŠãããã¹ãèŠçŽ ã§ãã£ã¬ã¯ãã£ããã€ã³ã¹ã¿ã³ã¹åãããŸãã
次ã«äŸã瀺ããŸãã
@Directive({
selector: 'app-popup',
attachDirectives: [
FocusAreaDirective
]
})
export class PopupDirective {
// Attached directives can be injected, just like template-declared directives today
constructor(public focusArea: FocusAreaDirective) {
}
}
ã¢ã¿ããããããã£ã¬ã¯ãã£ãã®@Input()
ããã³@Output()
ããããã£ã¯ãã³ãã¬ãŒãã§äœ¿çšã§ããã¢ã¿ããããããã£ã¬ã¯ãã£ãã®ã©ã€ããµã€ã¯ã«ã¡ãœããã¯ãã¹ãã³ã³ããŒãã³ãã®ã©ã€ããµã€ã¯ã«ã®äžéšãšããŠåŒã³åºãå¿
èŠããããŸãã ã¢ã¿ããããããã£ã¬ã¯ãã£ãã¯ããã¹ãèŠçŽ ã«ãã€ã³ãããããšãã§ããŸãã åºæ¬çã«ãããã¯ä»æ¥ã®ãã³ãã¬ãŒã宣èšãã£ã¬ã¯ãã£ããšãŸã£ããåãããã«æ©èœããŸããããã³ãã¬ãŒãã§å®£èšããå¿
èŠã¯ãããŸããã
ãã®æ©èœã¯Angularã«å€§ããªã¡ãªãããããããããã£ã¬ã¯ãã£ãã®æ§æãä»ããŠããã¯ãªãŒã³ã§ã·ã³ãã«ãªã³ã³ããŒãã³ãã¢ãŒããã¯ãã£ãå®çŸã§ãããšæããŸãã
çŸåšãåæ§ã®åœ¢åŒã®ãã£ã¬ã¯ãã£ãã®åå©çšãå¿ èŠãªå Žåã¯ã2ã€ã®éžæè¢ããããŸãã
å¥ã®èšãæ¹ãããã°ããã®æ©èœããªãããã«ãã¯ãªãŒã³+ã·ã³ãã«ã³ã³ããŒãã³ãã®äœ¿çšãšã¯ãªãŒã³+ã·ã³ãã«ã³ã³ããŒãã³ãã®ãªãŒãµãªã³ã°ã®éã«äžå¿ èŠãªãã¬ãŒããªããçããããšããããŸãã
@johncrim
å®éã®å Žåãã«ã¹ã¿ã ãã£ã¬ã¯ãã£ãã«ã¯å
¥åããããããããå€æããŠãã¢ã¿ããããããã£ã¬ã¯ãã£ããžã®å
¥åãšããŠæž¡ãå¿
èŠãããããšã«æ³šæããŠãã ããã ããããããã¯ããã£ã¬ã¯ãã£ããã³ã¬ãŒã¿ãªãã·ã§ã³ã®host
å±æ§ã«äŒŒãæ§æã§å®è¡ã§ããŸãã
@amakhrov ïŒè¯ãç¹-ããããããããããã«ãäŸããå ¥åãé€å€ããŸããã ãããå¿ èŠãªã»ãšãã©ã®å Žåãæ·»ä»ããããã£ã¬ã¯ãã£ãã®å ¥åïŒãŸãã¯åºåïŒãå€æããå¿ èŠã¯ãããŸãã-ãããã¯ïŒçæ³çã«ã¯ïŒæ§æå¯èœãªåäœãšããŠæ©èœãããããã®å ¥åïŒãŸãã¯åºåïŒå€ã¯ãã³ãã¬ãŒããããã€ã³ãã§ããŸã芪ãã£ã¬ã¯ãã£ãïŒãŸãã¯ã³ã³ããŒãã³ãïŒã䜿çšããŸãã
ååã®ç«¶åãŸãã¯ååã®æ確ãã®åé¡ãããå ŽåïŒæ§æã®ãã£ã¬ã¯ãã£ããèšèšãããšãã«é¿ããããšããŸãïŒããŸãã¯å ¥åãŸãã¯åºåãå€æããå¿ èŠãããå Žåã¯ãæ·»ä»ããããã£ã¬ã¯ãã£ãã芪ã«æ¿å ¥ããããšã§éåžžã«ç°¡åã«åŠçã§ããŸããã£ã¬ã¯ãã£ããäœæããã¢ã¿ããããããã£ã¬ã¯ãã£ãã«å§ä»»ããæ°ããå ¥åãŸãã¯åºåããããã£ã芪ã«äœæããŸãã
ç§ã¯æ£çŽã«ç«ã£ãŠããŸãã
ãã®åé¡ã¯çŸåšãå
¬åŒããŒããããã®ãå°æ¥ãã»ã¯ã·ã§ã³ã«ãªã¹ããããŠããŸãã https://angular.io/guide/roadmap#support-adding-directives-to-host-elementsãåç
§ããŠ
ãã¹ãèŠçŽ ãžã®ãã£ã¬ã¯ãã£ãã®è¿œå ããµããŒã
é·å¹Žã®æ©èœèŠæ±ã¯ããã¹ãèŠçŽ ã«ãã£ã¬ã¯ãã£ããè¿œå ããæ©èœãè¿œå ããããšã§ãã ãã®æ©èœã«ãããéçºè ã¯ç¶æ¿ã䜿çšããã«ãè¿œå ã®åäœã§ç¬èªã®ã³ã³ããŒãã³ããæ¡åŒµã§ããŸãã ãã®ãããžã§ã¯ãã§ã¯ãAPIã®å®çŸ©ãã»ãã³ãã£ã¯ã¹ãããã³å®è£ ã«é¢ããŠããªãã®åŽåãå¿ èŠã«ãªããŸãã
æ°ä»ããã°ãããªã®ã§ããã€è¿œå ããããã¯ããããŸããããããã¯çŽ æŽããããã¥ãŒã¹ã§ãããææ矩ã§å¿åŒ·ããžã§ã¹ãã£ãŒã§ããããšãèªããŸãã æã亀差ããç¶ããŸãã
ããã«çœ®ããŠãããããŒã ã«æè¬ããŸãïŒ ððŸ
æãåèã«ãªãã³ã¡ã³ã
@IgorMinar Ivyã®äœæ¥ã«ããããããããå®çŸå¯èœã«ãªããŸãã ããããã¯ããv6ãéããŸããã