ããã§äœãåé¡ã«ãªã£ãŠããŸããïŒ http://plnkr.co/edit/nm8OkrpZCIp4cvA6TbpO?p=preview
ç§ãåæ§ã®åé¡ã«çŽé¢ããŠãããåãã©ã®ããã«åæåãããããããã³èŠªãåæåããã»ã¹ã®äžéšãšããŠåãæŽæ°ããæ¹æ³ãåå ã®ããã§ãã ãŸãŒã³ã䜿çšããéãåé¿çãå«ãåæ§ã®ãµã³ãã«ããããŸãïŒ http ïŒ
ã³ã³ã¹ãã©ã¯ã¿ãŒïŒprivate _zoneïŒNgZoneïŒ{}
ngAfterViewInitïŒïŒïŒvoid {
this._zone.overrideOnTurnDoneïŒïŒïŒ=> {
this.child.title = '芪ããã®ã¿ã€ãã«';
}ïŒ;
}
ããã¯ãã°ã§ã¯ãªããæå³ãããšããã«æ©èœããéçºã¢ãŒãã®æ©èœã§ãã enableProdMode( )
åŒã³åºã-ã¢ããªãããŒãã¹ãã©ããããŠäŸå€ãã¹ããŒãããªãããã«ãããšãã«ãæŽæ°ããããã©ã³ã¯ãåç
§ããŠãã ããã
ãšã¯ãããããã¯æ£åœãªçç±ã§ã¹ããŒãããŠããŸããã€ãŸããå€æŽæ€åºã®ãã¹ãŠã®ã©ãŠã³ãã®åŸãéçºã¢ãŒãã¯ããã«2çªç®ã®ã©ãŠã³ããå®è¡ããŠãæåã®ã©ãŠã³ãã®çµäºä»¥éã«ãã€ã³ãã£ã³ã°ãå€æŽãããŠããªãããšã確èªããŸããããã¯ãå€æŽãçºçããŠããããšã瀺ããŠããããã§ããå€åæ€åºèªäœã«ãã£ãŠã
ãã©ã³ã¯ã«ã¯ããã€ã³ãã£ã³ã°[attr.spinner]=isLoading
ãããã ngAfterViewInit
ãèµ·åããããšãã«çºçããã this.load()
ãžã®åŒã³åºãã®çµæãšããŠã isLoading
ãå€æŽãããŸããæåã®å€åæ€åºã¿ãŒã³ã®äžéšãšããŠçºçããŸãã ãã ããããèªäœã¯åé¡ã§ã¯ãããŸãããåé¡ã¯ã this.load()
ããã€ã³ãã£ã³ã°ãå€æŽããããæ°ããã©ãŠã³ãã®å€æŽæ€åºãããªã¬ãŒããªãããšã§ããã€ãŸãããã®ãã€ã³ãã£ã³ã°ã¯ãå°æ¥ã®å€æŽæ€åºã©ãŠã³ããŸã§æŽæ°ãããŸããã
ããã§åæåãããChildView
ãããããã³ã³ããŒãã³ããafterViewInit
ã§ã»ããã¢ããããå¿
èŠããããŸãã ãã®å€æŽãisLoading
å€æŽããæ£ããæ¹æ³ã¯äœã§ããïŒ ã©ããã³ãŒã«this.load
ã«ãã£ãŠsetTimeout
ïŒ
ãã®ã¡ãœããã®éã«å€æŽæ€åºã®å¥ã®ã©ãŠã³ããããªã¬ãŒããäœããäœããããå¿ èŠããããŸã-ã€ãã³ããçºè¡ããŸãã ã¿ã€ã ã¢ãŠãã§ã©ããããïŒng1ãžã®ãã¥ãŒãã©ãã·ã¥ããã¯:-PïŒã¯ãæ©èœãã1ã€ã®æ¹æ³ã§ãããng2ã§ã¯éåžžã«é¢åã§ãã
ããã¯ãŠãŒã¶ãŒãã¬ã³ããªãŒã«èŠããŸããã ãã®ã¡ãœããã¯ãåãå®çŸ©ããããšãã«ã³ã³ããŒãã³ãã®åæåãå®äºã§ããå Žæã ãšæããŸãããä»ã§ã¯ããã€ãã®ã«ã¹ã¿ã ã«ãŒã«ãããããšãããããŸããã æ°ããå€æŽæ€åºã©ãŠã³ããå éšçã«åŒ·å¶ããŠããŠãŒã¶ãŒããng2å ã«é ãããããã«ããå¿ èŠããããšæããŸãã
ããã§éæããããšããŠããããšã®ãã代衚çãªãµã³ãã«ãæçš¿ã§ããŸããïŒ ç»åã¹ãããŒã®å Žåã¯ãæšæºã®ãã€ã³ãã£ã³ã°ã䜿çšããããšããå§ãããŸãã
@ AerisG222åäžã ãããéæããããã«åçŽãªãã€ã³ãã£ã³ã°ã䜿çšã§ããªãçç±ã¯ãããŸããïŒ éåžžããŸãŒã³ã®åäœããªãŒããŒã©ã€ãããããšã¯ãå§ãããŸããã
@robwormaldããããã®å Žåã¯ããããã£ãã€ã³ãã£ã³ã°ãè¡ãããšãã§ããŸãã ç§ãæã£ãŠããå®éã®ã±ãŒã¹ã«ã¯ãããå°ãè€éãªå¥ã®ããããã£ãã€ãŸãã«ã¹ã¿ã ãªããžã§ã¯ãã®é åãå«ãŸããŸããããããããããã£ãã€ã³ãã£ã³ã°ãä»ããŠèšå®ã§ããŸãã
@ViewChild
ã®ãããªãã®ããªããã°ããããæ
å ±ãäŒããå¯äžã®åççãªæ¹æ³ã§ãããããç§ã¯ããŸãæ°ã«ããªãã ãããšæããŸãã ããããã³ãŒãå
ã®ã³ã³ããŒãã³ãåç
§ãåŠçã§ããããã«ã @ViewChild
ãèŠãã®ã¯éåžžã«è奮ããŠããŸããã ããã«ãããããŒã¯ã¢ãããç°¡çŽ åãããã³ãŒããä»ããå¶åŸ¡ã匷åãããŸããããã¯ãããŒã«ã®ãµããŒãïŒã€ã³ããªã»ã³ã¹ãã³ã³ãã€ã«æã®ãã§ãã¯ãªã©ïŒãå¢ãããããtypescriptã§ããã«åœ¹ç«ã¡ãŸãã ãŸããåã®ç¶æ
ãšããŠã®ã¿äœ¿çšããããšãç®çãšããã¡ã³ããŒå€æ°ã远跡ããå¿
èŠããªããããã³ã³ãããŒã³ã³ããŒãã³ããç°¡çŽ åãããŸãã
ãã1ã€ã®éèŠãªç¹ã¯ãããããã£ãã€ã³ãã£ã³ã°æ§æã䜿çšããŠã¢ããªã±ãŒã·ã§ã³ã調ã¹ãå Žåããã³ãã¬ãŒãã調ã¹ãŠãæçµçã«èª°ãããŒã¿ãæ¶è²»ããŠãããã確èªããå¿ èŠãããããšã§ãã ããã¯ãã³ãŒããä»ããŠé ç·ãããå Žåã«ããæçœã«ãªããŸãã
äŸã«ãšã£ãŠéèŠãªããšã ãã瀺ãããã«ã³ãŒããã¯ãªãŒã³ã¢ããããŸããã ç»åã®èªã¿èŸŒã¿äžã«ã®ã¿ã¹ãããŒã衚瀺ããã¹ãããŒãåé€ããŠç»åã衚瀺ãããšããèãæ¹ã§ãã ç»åã¯ãèŠçŽ ãç»é¢ã«è¡šç€ºãããŠããå Žåã«ã®ã¿èªã¿èŸŒãŸããŸãã
inflate.ts
import {Component, Input, Renderer, ElementRef, AfterViewInit, ViewChild} from 'angular2/core';
@Component({
selector: '[inflate]',
templateUrl: './inflate.html',
styleUrls: ['./inflate.css']
})
export class Inflate implements AfterViewInit {
@Input('inflate') url: string;
@ViewChild('holder') holder: ElementRef;
isLoaded = false;
isLoading = false;
constructor(private renderer: Renderer) {}
ngAfterViewInit() {
setTimeout(_=> this.inflate()); // BUGFIX: https://github.com/angular/angular/issues/6005#issuecomment-165911194
}
inflate() {
let bounds = <ClientRect>this.holder.nativeElement.getBoundingClientRect();
if(bounds.bottom > 0 && bounds.top < window.innerHeight) {
this.isLoading = true;
let img = new Image();
img.src = this.url;
img.onload = _=> {
this.isLoaded = true;
this.isLoading = false;
this.renderer.setElementStyle(this.holder,
'background-image', 'url("' + this.url + '")');
};
}
}
}
inflate.html
<image-holder #holder></image-holder>
<spinner *ngIf="isLoading"></spinner>
ããŒãæã«ã¢ãã¡ãŒã·ã§ã³ãå®äºããç¶æ ã§ãã§ãŒãã€ã³ããŠããéã¯ããã¹ãã®èæ¯ã®äžéæ床ã«åœ±é¿ãäžããªããããç»åããã¹ãã«ä¿æããªãããã«ããå¿ èŠããããŸãã
ãã¹ãããããã£ã¬ã¯ãã£ãã«é¢é£ããå¯èœæ§ã®ããåé¡ããããŸãã
http://plnkr.co/edit/myX2Alx9jie2q0FDIME7?p=preview
ããã§ã¯ãprogressBar.tsã§ngStyleã«ãã€ã³ãããŠããŸãã
ã¹ã¿ã€ã«ãªããžã§ã¯ããçããããšã蚌æããããã«æ»ãåã«ãã¹ã¿ã€ã«ãªããžã§ã¯ãããã°ã«èšé²ããŠããŸãã
ãŸããExpressionChangedAfterItHasBeenCheckedExceptionãååŸããŸãã
@ svi3cã¯ãå®éã«ã¯_different_ãªããžã§ã¯ããè¿ããŸãã åé¢æ°åŒã³åºãã¯ãããŒ/å€ã«é¢ããŠã¯åã®ãªããžã§ã¯ãã€ã³ã¹ã¿ã³ã¹ãšãçãããããã€ã³ã¹ã¿ã³ã¹/åç §ã«é¢ããŠã¯ããã§ã¯ãªãæ°ãããªããžã§ã¯ãã€ã³ã¹ã¿ã³ã¹ãè¿ããŸãã
ãã®ç¶æ³ã«å¯ŸåŠããã«ã¯ãããã€ãã®æ¹æ³ããããŸãã
ChangeDetectionStrategy.OnPush
æŠç¥ã䜿çšããŠãå
¥åã®1ã€ãå€æŽããããšãã«ã®ã¿é¢æ°ãåŒã³åºãããããã«ããŸãïŒäŸïŒ http ïŒ ng2ã®ããã°ã¬ã¹ããŒãã£ã¬ã¯ãã£ãã®å¥ã®äŸãšããŠã httpsïŒ//github.com/ng-bootstrap/core/blob/master/src/progressbar/progressbar.tsã確èªããããšããå§ãã
@ pkozlowski-opensourceããããšãããããŸããïŒ
https://angular.io/docs/ts/latest/guide/template-syntax.html#!#ngstyleãèªãã ã ãã§ãå€æŽæ€åºæŠç¥ã«ãŸã ééããŠããŸããã ããã¯çŽ æŽãããããšã§ãïŒ :)
@ drew-mooreïŒ
ãã®ã¡ãœããã®éã«å€æŽæ€åºã®å¥ã®ã©ãŠã³ããããªã¬ãŒããäœããäœããããå¿ èŠããããŸã-ã€ãã³ããçºè¡ããŸãã
ngAfterViewInitå
ã§å€æŽæ€åºãåããªã¬ãŒããããã®_æ£ãã_ããã³_æãç°¡åãª_æ¹æ³ãæããŠãã ãã-å¿
èŠãªã®ã¯æŽæ°ãããããããã£ã ãã§ãããšä»®å®ããŸãã ApplicationRef.tick()
ã¯ããApplicationRef.tickãååž°çã«åŒã³åºããããäŸå€ãåŒãèµ·ãããããããã§ã¯æ©èœããŸããã å€æŽæ€åºãããªã¬ãŒããããã ãã«ã€ãã³ããçºè¡ããã®ã¯ééã£ãŠãããšæããŸãïŒãããŠç§ã«ãšã£ãŠã¯ããŸããããŸããã§ããïŒããããŠsetTimeout
ã§ãã
ããã§ã®ã³ã¡ã³ãã«åºã¥ããšãngAfterViewInitã®ãã€ã³ããããããããã£ãæŽæ°ããããšã¯ããªãäžè¬çãªèŠä»¶ã®ããã§ãïŒåã³ã³ããŒãã³ããžã®äŸåã®ããïŒããã®ãããAngular2ã«ã¯ãããè¡ãç°¡åãªæ¹æ³ããªãããã§ãã
ngAfterViewInitã§ãã€ã³ããããããããã£ãæŽæ°ããããšã_ééã£ã_ããšã§ããå Žåã代æ¿æ段ã¯äœã§ããïŒ
ãããç°¡åãªãã®ã§ãïŒ
ãã£ã¬ã³ãžïŒ
ã¬ã³ããªã³ã°ãããå¹
ã«åºã¥ããŠãdomèŠçŽ ã®é«ããïŒç¹å®ã®åŒãä»ããŠïŒèšå®ããŸãã
æåŸ
ïŒ
èŠçŽ ãã¬ã³ããªã³ã°ãããããå¹
ãååŸããããã«åºã¥ããŠé«ããèšç®ããŸãã
çŸå®ïŒ
setTimeoutïŒïŒ
ngAfterViewInit() {
window.setTimeout(() =>
this.elementHeight = (this.nativeElement.offsetWidth * this.randomImage.dim.h) / this.randomImage.dim.w
)
}
@Birowsky PlunkerïŒ
@zoechiããã«äŸããããŸãïŒ http ïŒ //plnkr.co/edit/MML5uHEFQdL0k0TA5HtY
ngAfterViewInit
ã©ã€ããµã€ã¯ã«ããã¯ã®app/app.component.ts#21
ã®setTimeout
ãåãæ¿ããããšãã§ããŸãã
ã«ã¹ã¿ã ngModel
valueAccessor
ã®writeValue( newValue )
ã¡ãœãããå®è£
ããããšãããšãã«ãåæ§ã®åé¡ãçºçããŸããã newValueãã³ã³ããŒãã³ãã«é©çšããããšãããšãå€ãå€æŽãããããšãéç¥ãããŸãïŒæªãæ¹æ³ã§ïŒã çãããèŠã€ããããã«ããããsetTimeoutïŒïŒã§ã©ãããããšãããããä¿®æ£ããããŸãã ããããè¯ãæ¹æ³ã§ã¯ãããŸããã
å¥ã®äŸããããŸãã @HostBinding()
ãèšå®ããã QueryList
ã«ãã£ãŠéç¥ããããšããç¹ã§ãããªãåçŽã§ãã
ç§ã®åé¡ïŒ5950ãšåãã§ãã
ããããããã«è¡ãæ¹æ³ã«é¢ããããã€ãã®æšå¥šäºé
ãããã«ãããŸãã
http://stackoverflow.com/questions/34827334/triggering-angular2-change-detection-manually
ãã ããå¿
èŠãªåŠçãå®è¡ãããããšãã§ããªãã£ãããããŸã setTimeout
ã©ããããŠããŸãã ã³ãŒã«ããã¯ã®æåŸã«ChangeDetectorRef.detectChanges()
ããŠãCDãããªã¬ãŒã§ããããã§ã...
HTML5ã¡ãã£ã¢ãœãŒã¹æ¡åŒµæ©èœã䜿çšããŠããããªèŠçŽ ã«åºã¥ããŠãªãŒãã£ãªã³ã³ããã¹ããäœæããŠããããã @ViewChild
ã䜿çšããå¿
èŠããããŸãã ãªãŒãã£ãªã³ã³ããã¹ãã«åºã¥ããŠããã£ã³ãã«æ°ãªã©ã®æ
å ±ã衚瀺ããããšããŠããŸãã ããããç§ããã®åé¡ã«ééããŸããã ãããåé¿ããæ£ããæ¹æ³ã¯äœã§ããïŒ
@ElsewhereGameså®éã®ã³ãŒããèŠãã«
@zoechiå ±åããå®éã®ãã°ã¯ãããŸããããã ãDOMã«çŽæ¥ã¢ã¯ã»ã¹ããªãããšã¯æãŸããããšã§ãããå¿ ãããåé¿ã§ãããšã¯éããŸããïŒ @robwormaldã®ã³ã¡ã³ãã«å¿ããŠïŒã å®éã®APIã«ã€ããŠã¯ã createMediaElementSourceã®ããã¥ã¡ã³ããåç §ããŠ
_ngModel_ã®åé¡ã§1æã«æçš¿ããŸããã ä»ãç§ã¯_ViewChildren_ã®åé¡ã§åã³æ»ã£ãŠããŸããã ãã ãããããã®ä»ã®äŸã®ããã€ããšã¯ç°ãªããç§ã¯å®éã«ãã¢ã§äœãããããšã¯ããŠ
åæ§ã®åé¡ãçºçããŸãããããããåé¿ããããã«ã³ãŒããæžãçŽãå¯èœæ§ããããŸãã @bennadelã®æçš¿ã§å€§ç¬ãã
https://github.com/angular/angular/issues/6618
ãããŸã§ã®ãšããããããåé¿ããæ¹æ³ã¯åžžã«ãããŸããããå°ãªããšãå€æŽæ€åºã¡ã«ããºã ã§ããå€ãã®ããã¥ã¡ã³ãã䜿çšã§ããããšãããã§ãææ¡ããŸãã @bennadelããªãã®åé¡ã¯ç§ã«å¥ã®åé¡ãæãåºãããŸãã
https://github.com/angular/angular/issues/5177
ããã解決ããå ŽæãšããŠãè¿œå ã®ã©ã€ããµã€ã¯ã«ããã¯ãOnBeforeBinding / OnBeforeRenderingã«è¿œå ããããšãææ¡ãããŸããã ãã®è§£æ±ºçãããªãã®åé¡ã解決ããããã§ãã
@tanduã¯ngAfterViewInit
ãngOnInit
眮ãæããã ãã§ã
@ e-oz https://github.com/angular/angular/issues/6005#issuecomment -165906207
@tanduã¹ãããŒããã€éå§ãããïŒåã®èªã¿èŸŒã¿ãåã®ç»åã®èªã¿èŸŒã¿-ãŠãŒã¶ãŒã«ãšã£ãŠã¯ãã¹ãŠãèªã¿èŸŒãŸããŸãïŒã¯å®éã«ã¯
@ e-oz https://github.com/angular/angular/issues/6005#issuecomment -165951692åã®å¢çã«ã¢ã¯ã»ã¹ããŠãç»åã®èªã¿èŸŒã¿ãéå§ããå¿ èŠããããã©ãããæ€åºããŸãã
@tanduã䜿çšãããšããã®ãã¹ãŠã®ãã§ãã¯ãåã³ã³ããŒãã³ãã³ãŒãã«ç§»åãïŒåã³ã³ããŒãã³ãã®ngAfterViewInitã§æ£åœã«ãªããŸãïŒãisLoadingãå€æŽãããšãã«ã€ãã³ãã芪ã«éä¿¡ã§ããŸãã
@ e-oz HTMLã§ã³ã³ããŒãã³ãã#holder
ãšããŠå®çŸ©ããŸãïŒ <image-holder #holder></image-holder>
ã ãããã£ãŠããã®ããã®jsãã¡ã€ã«ã¯ãããŸããã
ãããã£ãŠããããäœæããŸãããã以å€ã®å Žåã¯ãViewã®å ŽåãngAfterViewInitã䜿çšããå¿
èŠã¯ãããŸããã
åãšããŠã®å®éã®ã³ã³ããŒãã³ãã¯ãããŸãã-äœãã¬ã³ããªã³ã°ãããŸããã
æ¥ã2016幎3æ13æ¥ã«ã¯15æ18 tanduã§[email protected]æžããŸããïŒ
@ e-oz https://github.com/e-ozã³ã³ããŒãã³ããhtmlã®#holderãšããŠå®çŸ©ããŸãïŒ
ã ãããã£ãŠããã®ããã®jsãã¡ã€ã«ã¯ãããŸããã ãã«ããŒ>
â
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããããGitHubã§è¡šç€ºããŠãã ãã
https://github.com/angular/angular/issues/6005#issuecomment-195963389 ã
element.getElementsByTagsName
ãŸãã¯åæ§ã®ã¡ãœããã䜿çšããŠãChildComponentã䜿çšããªãããšãã§ããŸãã 確ãã«åé¿çããããŸãã setTimeout
ä¿®æ£ã§å€§äžå€«ã§ãã åé¡ã¯ãã¡ãœããåã¯ãåã³ã³ããŒãã³ããåæåããŠã³ã³ããŒãã³ãã«ãã€ã³ãããããžãã¯ãå®çŸ©ããããã«äœ¿çšã§ããããšã瀺åããŠããŸãããã¡ãœããã¯å€æŽæ€åºãµã€ã¯ã«ã®éäžã§å®è¡ãããŠããããšãèªèããŠããªããããé·ãéããŸããŸãªäººã
ããã®èŠæ
ã®ã¹ã¬ããã
@tanduç§ã¯ããã«ã€ããŠããªãã«çµ¶å¯Ÿã«åæããŸããããã¯éåžžã«åä»ãªå¶éã§ãã
ãã®äŸ¡å€ã«ã€ããŠã¯ãå ã®åé¿çã次ã®ããã«å€æŽããŸãããããã¯ãåççãªã¢ãããŒãã®ããã«æãå§ããŠããŸãã ãããããããã¯ããªãã®ç¶æ³ã§è©Šã䟡å€ããããŸãïŒ
constructor(private _changeDetectionRef : ChangeDetectorRef) { }
ngAfterViewInit() : void {
// your code
this._changeDetectionRef.detectChanges();
}
ãã©ãŒã æ€èšŒïŒå¿ é å ¥åïŒã䜿çšãããšãåãäŸå€ãçºçããŸãã ãã®åé¡ã«é¢é£ããŠããŸããïŒ
ãã©ã³ã«ãŒïŒ http ïŒ//plnkr.co/edit/Fp6XT5mC6ZCB14Z1gvTiïŒp = Preview
@eivindrããã£ãšèŠãŠãå ¥åã§ngFormControlãèŠãããšããªãã£ãã®ã§ããããã©ãŒã èŠçŽ ã«ãã€ã³ãããŠã³ã³ãããŒã«ã°ã«ãŒãã«ãã€ã³ãããå¿ èŠãããããããã®çç±ãæå³ãããããŸãããåã ã®å ¥åã«ã¯å¯Ÿå¿ãããã®ããããŸãã ngControlã ãããã«ããããªãã®ãã©ã³ã«ãŒã§åé€ããŸã
[ngFormControl]="formModel.find('title')"
ãããŠããã¯ããªãã®ãšã©ãŒãä¿®æ£ããŸãã
ç§ã¯ãã®åé¡ãåé€ããããšãæåŠããŸã:)æšæ¥ãç§ã®åé¡ãå ¥åããããã£ã«äŸåãããã¹ããã€ã³ãã£ã³ã°ã«ç¹ã«é¢é£ããŠããããšã瀺ãããšãã§ããŸããïŒ
ãã¥ãŒãã³ãã¬ãŒããšãã¹ãã®ãã€ã³ãã£ã³ã°- -ãš_only them_ã®äžã€ãå€æŽäŸå€ãåŒãèµ·ãããŠããç§ã¯ãã³ã³ããŒãã³ãã¯ã2ã€ã®å ¥åã«äŸåããŠç©äºãæã£ãŠããã®ã§ãããã¯ããã®æç¹ã§ã¯ãã°ã§ãããšä¿¡ããŠããªããã°ãªããŸããã ãããã®äž¡æ¹ãåé¡ãåŒãèµ·ãããå Žåãç§ã¯äœãå¥ã®ããšãèããã§ãããã ãããããã®ãã¡ã®1ã€ã ããåé¡ãåŒãèµ·ãããŠããã®ã§ãããã¯ãã°ã§ããã«éããããŸãããã
@eivindr空çœã®ãã©ãŒã ããå§ããŠãããã°ã©ã ã§ãã©ãŒã ã³ã³ãããŒã«ã®å€ãèšå®ãããšãã«ããåãåé¡ãçºçããŸãã åé¿çãèŠã€ããŸãããïŒ
@MarkPerryBVããããrequiredã䜿çšãããšãããã§ãã¯åŸã«å€æŽãããŸããããšãã
@ user414 [ngFormControl]ãåé€ãããšãå ¥åã«ãå¿ é ãã®æ€èšŒããããŸããã
@MarkPerryBVç§ã¯ïŒä»ã®ãšããïŒç§ã®ããã«åãåé¿çãèŠã€ããŸããã enableProdModeïŒïŒãæå¹ã«ããå¿ èŠããããŸããã å ¥åã«ngIfã䜿çšããŠããã®ã§ãå ¥åãã¬ã³ããªã³ã°ãããåŸã«ChangeDetectorRef.detectChangesïŒïŒãå®è¡ããå¿ èŠããããŸããïŒããã§ãªãå Žåãã³ã³ãã³ããããã«ããããããå ¥åã¯ç¡å¹ã§ããïŒã
enableProdMode()
ããŠããå®éã«ã¯äœãä¿®æ£ãããŸãããããã«ãã§ãã¯ã®å®è¡ãåæ¢ããäœããééã£ãŠããå¯èœæ§ãããããšãéç¥ããããšã§ãçç¶ããã¹ã¯ããã ãã§ãã
AerisG222ã®ä¿®æ£ã¯ã setTimeout
ã䜿çšãããããåªããŠããããã§ãã ããªããŒã¿ãŒã§addControl()
ãåŒã³åºããåŸãæå³ããåäœãå€æŽæ€åºãæåã§ããªã¬ãŒããå¿
èŠãããã®ã¯æ¬åœã§ããïŒ
addControlïŒïŒãåŒã³åºããåŸãããã§åãåé¡ãçºçããŸãã addControlïŒïŒã¯ChangeDetectionRef.detectChangesïŒïŒãåŒã³åºãå¿ èŠããããšæããŸãã
@CaptainCodemanç§ã¯ç¥ã£ãŠããŸã-ããã¯äžæçãªåé¿çã§ããã
ng2 @ beta17 ã rxjs @ 5.0.0 -beta.6 ãzoneã䜿çšããŠããå Žåãããã¯éçºã¢ãŒãã§å€±æããªããªããŸããã [email protected]ã ç§ã¯ãŸã ChangeDetectionRef.detectChangesïŒïŒãåŒã³åºãå¿ èŠããããŸã
@eivindr plnkrãbeta17ä¿®æ£ã«æŽæ°ã§ããŸããïŒ
ç§ã¯ããã«ã€ããŠé ãæ©ãŸããŠããŸããç§ã¯enableProdMode()
ã«æåºããããšãæåŠããŸãã
@ AerisG222ããªãã®ã¢ãããŒãã¯ç§ã®ããã«åããŸãïŒ
@ AerisG222ã䜿çšããã®ã«é©ããã¢ãããŒããæçš¿ããã¢ãããŒãã䜿çšããŠããŸããïŒ ã¯ããåäœããŸãããæåã§changeDetectionRef.detectChanges()
ããªã¬ãŒããè¯å¿ã¯ãããŸããïŒ
åçãã©ãŒã æ€èšŒãå®è¡ããŠãããã©ãŒã ããªã»ããããããšãããšãåãåé¡ãçºçããŸãã ãããç§ã®ãã©ã³ã¯ã§ã
åçŸããæé ã Is EmployeeCheckedã䜿çšããŠãã©ãŒã ãéä¿¡ããŸãã ãã©ãŒã ãæŽæ°ãããããIsEmployeeãããäžåºŠç¢ºèªããŸãã
éä¿¡é¢æ°ã§changeDetectionRef.detectChangesïŒïŒã䜿çšããŠããŸãã
ãã®@ AerisG222ãããããšã:)
setTimeoutã®åé¿çããã¹ãŠå¥œãã§ã¯ãããŸããã ç§ã¯ä»¥äžãææ¡ããŸãïŒ
http://plnkr.co/edit/9umnTGsdFWhbaOBeftuZ?p=preview
ChangeDetectorRef.detectChanges
ã¯ãå¿
ãããè¯ãã¢ãããŒãã§ã¯ãããŸããã çç±ã®äŸïŒ
芪ã³ã³ããŒãã³ãã¯ã ngAfterViewInit
éã«åã³ã³ããŒãã³ãã®ãããªãã¯APIãåŒã³åºããŸãã ãã®åŒã³åºãã¯ãåã®ãã€ã³ãã£ã³ã°ãå€æŽããŸãã 芪ããdetectChanges
ãåŒã³åºããšåé¡ã解決ããŸãããããã¯èŠªããã€detectChanges
ãåŒã³åºãããç¥ã£ãŠããå¿
èŠãããããã®åŸã«åã®APIåŒã³åºããè¡ãå¿
èŠãããããšãæå³ããŸãã ChangeDetectionStrategy.OnPush
ã䜿çšããå Žåããã®å Žåã®ãã€ã³ãã£ã³ã°ãå€æŽããchildrenã¡ãœããã§detectChanges
ãåŒã³åºãããšã¯æ©èœããªãããšã«æ°ä»ãã§ãããã
ViewContainerRef.createComponent()
ãä»ããŠåãåçã«è¿œå ããŠãããåã€ã³ã¹ã¿ã³ã¹ãæŽæ°ãããšããã®ãšã©ãŒãçºçããŸããã ç§ã¯RC2ã䜿çšããŠããŸãïŒãããŠæžäŸ¡ååŽããããã®ã䜿çšããªãããã«ããŠããŸãïŒã
æåã¯åé¡ãªãåäœããŸãããïŒæåã®ã¬ã³ããªã³ã°ïŒãæ°ããããŒã¿ãåºåããã³ã³ããŒãã³ããè¿œå ããŸããã ãã®ã€ãã³ãã¯èŠªã³ã³ããŒãã³ãã«ãã£ãŠãªãã¹ã³ããã芪ã³ã³ããŒãã³ããããŒã¿é åãæŽæ°ããŠãå€æŽã®æ€åºãšæ°ããåçãªåã³ã³ããŒãã³ãã®äœæãããªã¬ãŒããŸããã ã€ãã³ãã¯ããã©ãŒã ã®éä¿¡ã«ãã£ãŠããªã¬ãŒãããŸããã éä¿¡ãã¿ã³ãæŒããšããã¹ãŠåé¡ãããŸããã§ããã EnterããŒãæŒããŠéä¿¡ãçæãããšããšã©ãŒãçºçããŸãã
åçã³ã³ããŒãã³ãã®äœæãšæŽæ°ã®çŽåŸã«ChangeDetectorRef.detectChanges()
è¿œå ããããšã«ãªããŸããã 倧ããªåé¡ã§ã¯ãããŸãããããã¥ãŒã«æ°ããã³ã³ããŒãã³ããè¿œå ããã ãã§ããã·ã¹ãã ãåã®å€æŽæ€åºãèªåçã«ããªã¬ãŒããªãã®ã¯å¥åŠã«æããŸãã
@ aerisg222ãããåŒã³åºãå¿ èŠããããŸããïŒ_changeDetectionRef.detectChangesïŒïŒãã¹ãŠã®åã®ããããã£ã芪ããå€æŽãããåŸã§ããïŒ
ããŠãç§ã¯ã¡ããã©ãã®åé¡ã«ééããŸããã åãããŒã¿ãªããžã§ã¯ãã䜿çšãã2ã€ã®å åŒã³ã³ããŒãã³ãããããŸãã ã©ã¡ãã®ãªããžã§ã¯ãããããŒã¿ãœãŒã¹ãæŽæ°ã§ãããšæ³å®ãããŠããŸãã ä»ã®ãœãŒã¹ã¯å®éã«ã¯ãªããžã§ã¯ãã®å€æŽã確èªããŸããããã§ãã¯åŸã«åŒãå€æŽãããããšãããªã¬ãŒããŸãã 以åã®å€ïŒ 'true'ã çŸåšã®å€ïŒ 'false'
ããã¯ãRC1ããRC4ã«ã¢ããã°ã¬ãŒãããåŸã«ç§ã«èµ·ãããŸãã
ãã£ã¡ãäžç·ã RC1ããRC4ã«ã¢ããã°ã¬ãŒãããåŸããããåã³ååŸãå§ããŸããã
ãã¶ãããããåŒãèµ·ãããå€æŽã¯ãå€æŽãã°ã®é倧ãªå€æŽãšããŠäŒéãããã¹ãã§ãã... kuzç§ã®ãã®ã¯ä»å£ããŠããŸãã
決åãåŸ
ã€å¿
èŠããããŸãã
å€éšããããã£ãæŽæ°ããã®ã¯é¢åãªã®ã§ãåã³ã³ããŒãã³ãã®äœ¿çšããããŸããã
ãã®ããã«ãŸãŒã³ãããã«ãããšæããŸãã...
ãã£ã¡ãäžç·ã ViewComponentRefãä»ããåçã³ã³ããŒãã³ãã®èªã¿èŸŒã¿ã¯ãRC1ãšã¯ç°ãªãRC2ãšRC4ã§åäœããããã§ãã
ãããç§ã®äœæ¥äžã®äŸåé¢ä¿ã§ãïŒ
ãäŸåé¢ä¿ãïŒ{
"@ angular / common"ïŒ "2.0.0-rc.1"ã
"@ angular / compiler"ïŒ "2.0.0-rc.1"ã
"@ angular / core"ïŒ "2.0.0-rc.1"ã
"@ angular / http"ïŒ "2.0.0-rc.1"ã
"@ angular / platform-bâârowser"ïŒ "2.0.0-rc.1"ã
"@ angular / platform-bâârowser-dynamic"ïŒ "2.0.0-rc.1"ã
"systemjs"ïŒ "0.19.31"ã
"core-js"ïŒ "^ 2.4.0"ã
"reflect-metadata"ïŒ "^ 0.1.3"ã
"rxjs"ïŒ "5.0.0-beta.6"ã
"zone.js"ïŒ "^ 0.6.12"
}ã
"devDependencies"ïŒ{
"typescript"ïŒ "^ 1.8.10"ã
"typings"ïŒ "^ 1.0.4"ã
ãåæã«ãïŒã^ 2.2.0ãã
"lite-server"ïŒ "^ 2.2.2"
}
ãããŠãããã«èšåããããšã©ãŒãåŒãèµ·ãããŠããäŸåé¢ä¿ããããŸãïŒ
ãäŸåé¢ä¿ãïŒ{
"@ angular / common"ïŒ "2.0.0-rc.4"ã
"@ angular / compiler"ïŒ "2.0.0-rc.4"ã
"@ angular / core"ïŒ "2.0.0-rc.4"ã
"@ angular / http"ïŒ "2.0.0-rc.4"ã
"@ angular / platform-bâârowser"ïŒ "2.0.0-rc.4"ã
"@ angular / platform-bâârowser-dynamic"ïŒ "2.0.0-rc.4"ã
"systemjs"ïŒ "0.19.31"ã
"core-js"ïŒ "^ 2.4.0"ã
"reflect-metadata"ïŒ "^ 0.1.3"ã
"rxjs"ïŒ "5.0.0-beta.6"ã
"zone.js"ïŒ "^ 0.6.12"
}ã
"devDependencies"ïŒ{
"typescript"ïŒ "^ 1.8.10"ã
"typings"ïŒ "^ 1.0.4"ã
ãåæã«ãïŒã^ 2.2.0ãã
"lite-server"ïŒ "^ 2.2.2"
}
RC2ãæ©èœããŠããŸããïŒ
ãã ã®è³ªåã§ããããšã©ãŒã«é¢ãã詳现æ å ±ãå ¥æããæ¹æ³ã¯ãããŸããïŒ ããšãã°ããšã©ãŒã«ãåŒããtrueããããfalseãã«å€æŽãããŸããïŒããšè¡šç€ºãããŠããå ŽåããåŒããäœã§ããããç¥ã£ãŠãããšäŸ¿å©ã§ãã
RC1ããRC4ã«ã¢ããã°ã¬ãŒãããåŸãããŸã£ããåãåé¡ãçºçããŠããŸãã ãããŠãç§ããããç解ããã®ã¯ãç§ã®ã³ã³ããŒãã³ãã®ngOnInit
é¢æ°ã«ãããã®ã§ãã ãã®é¢æ°ãã³ã¡ã³ãã¢ãŠããããšããšã©ãŒã¡ãã»ãŒãžãæ¶ãããã¹ãŠãæ£åžžã«æ©èœããŸãã äœããæèŠã¯ïŒ
ãã®åé¡ã¯å€ããæªçœ®ãè¬ããããŠããããããã®åé¡ã解決ããŸãã ããã§ãåé¡ã解決ããªãå Žåã¯ãå¿ ãæ°ãã課é¡ãäœæãã課é¡ãã³ãã¬ãŒãã«å¿ èŠãªãã¹ãŠã®è©³çŽ°ãèšå ¥ããŠ
ãããã人ã ã¯åœŒãããŸã æ°ããrcã§ãã®åé¡ãçµéšããŠãããšèšã£ãŠããŸãã...
ååŸ12æ52åã®æ°Žã2016幎7æ13æ¥ã«ã¯ããã¯ã¿ãŒBerchet [email protected]
æžããŸããïŒ
ã¯ããŒãºïŒ6005https ïŒ//github.com/angular/angular/issues/6005ã
â
ããªããèšåãããã®ã§ããªãã¯ãããåãåã£ãŠããŸãã
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããGitHubã§è¡šç€ºããŠãã ãã
https://github.com/angular/angular/issues/6005#event -720794445ããŸãã¯ãã¥ãŒã
ã¹ã¬ãã
https://github.com/notifications/unsubscribe/AAgIEFEVZmE0M53XxNpzAYg9hJT_E_viks5qVAyGgaJpZM4G4J_s
ã
ã¯ããRC4ã«ã¢ããã°ã¬ãŒãããã°ããã§ãæ°ããã«ãŒã¿ãŒãæ§æãã以å€ã«ã³ã³ããŒãã³ãã«1ã€ã®å€æŽãå ããªãã£ãããããã®åé¡ãçºçããŸããã RC1ã§ã¯ãã¹ãŠè¯ãã£ãã§ããããã¯ãŸã æ®ã£ãŠããããã§ãã
ãã詳ããæ å ±ïŒ
ngOnInit
å
ã®async
åŒã³åºããåå ã§ããããšãå€æãããã®ãšã©ãŒãçºçããŸãã éåæåŒã³åºãã³ãŒããã³ã¡ã³ãã¢ãŠããããããã®ã³ãŒããã³ã³ã¹ãã©ã¯ã¿ãŒã«ç§»åãããšããã¹ãŠãæ£åžžã«æ©èœããŸãã
@ ammar91
å€æŽåŸã«ãããåŒã³åºããŸãïŒ
changeDetectionRef.detectChangesïŒïŒ
@ zigzag95ã¯ããããã¯ç¢ºãã«åé¿çã§ããããããè¡ãã®ã¯éåžžã«ããããŒã ãšæããŸãã ç¬èªã®å€æŽæ€åºã¡ã«ããºã ãæåã§ããªã¬ãŒããã®ã§ã¯ãªããangularã®ãããªãã¬ãŒã ã¯ãŒã¯ããããããé©åã«åŠçããããšãæåŸ ããŸãã
ç§ã®å Žåãããã°ã¬ã¹ããŒã衚瀺ããã³é衚瀺ã«ããããã«app.component.ts
ã§Angularã€ãã³ããšããã¿ãŒããµãã¹ã¯ã©ã€ãããŠãããšãã«çºçããŸãã ããã¯ãã¹ãŠRC1ã§è¯ãã£ãããRC4ã§å£ããã
ãããåçŸã§ãã httpïŒ //plnkr.co/edit/jEtfUrQdc4sJBySj5kWNïŒp =
Heroes Linkãã¯ãªãã¯ããŠãç·šéããããŒããŒã®1ã€ãéžæãããšããšã©ãŒã衚瀺ãããŸãã
app.component.ts
ãšhero.service.ts
ã®å€æŽãã芧ãã ãã
ãã@vicb ãã¢ããããŒãããŠãããŠããããšãã ã©ã®ãããªè¡åãåãããã®ãæããŠãã ããã ããã¯æ¬¡ã®ãªãªãŒã¹ã§ä¿®æ£ããããšããããšã§ããïŒ
ç§ã®ããã«åããå¥ã®ç°¡åãªä»£æ¿ãœãªã¥ãŒã·ã§ã³ã¯ãå€ã芳枬å¯èœãªãã®ãšããŠè¿ããæŸåºå€ã10msé
ãããããšã§ãã ç§ã®å ŽåãäŸå€ã¯ã¹ãããŒå€ã§çºçããŠããŸãã<app-spinner *ngIf="spinner"></app-spinner>
this.eventService.toggleSpinnerAnnounced$.subscribe(
(show: boolean) => this.spinner = show
);
ããã¯ç§ã®ããã«åããïŒ
private spinner = new Subject<boolean>();
toggleSpinnerAnnounced$ = this.spinner.asObservable().delay(10); // This delay() is important
announceSpinnerToggle(show: boolean) {
this.spinner.next(show);
}
ããã¯ãé
延ã䜿çšããŠããŠãobservableãšã¯é¢ä¿ããªããããããŸããããŸããã
stettimeoutã䜿çšããå Žåãåãåäœã«ãªããŸãã
@Jarvensã¯ãäžé©åãªå Žæãžã®ãã®ã³ã¡ã³ãã®æçš¿ãåæ¢ããŠãã ããã
GitHubã®åé¡ã¯ããã°ã¬ããŒããšæ©èœãªã¯ãšã¹ãã«é¢ãããã®ã§ãã
ãµããŒãã«é¢ãã質åã«ã€ããŠã¯ããè²¢ç®-質åãŸãã¯åé¡ããããŸããïŒãã«ãªã¹ããããŠãããããªä»ã®ãã£ãã«ã䜿çšããŠãã ãã
ããªãã®ã³ã¡ã³ãã¯ããªãã®åé¡ã蚺æããã®ã«ååãªæ å ±ãæäŸããŠããŸããã
åèïŒChromeæ¡åŒµæ©èœng-inspector for AngularJS
ïŒbatarangã®ä»£ããã«è§åºŠ1ã®æ¡åŒµæ©èœïŒãåå ã§ãã®ãšã©ãŒãçºçããŸãã
ããã¯ãããã§ãïŒ ã¹ã¬ããå šäœãèªãã åŸãéçºã¢ãŒãã§åé¡ãä¿®æ£ããã®ã¯ã@ KarlGustav-unimicroãèšãããã«ãAngularJSã®ng-inspectorãç¡å¹ã«ããããšã§ããã
ããã¯èšã£ãŠãã ChangeDetectorRef.detectChanges()
ãç§ã®ããã«åããããæ¬åœã«ããããŒã ãšæããã
@ pkozlowski-ãªãŒãã³ãœãŒã¹ã
å
¥åã®1ã€ãå€æŽããããšãã«indicatorStyle()
ãåŒã³åºãããçç±ããŸã ããããŸããã
ãã£ãšèª¬æããŠããããŸããïŒ
ç§ã¯å®è£
ããå Žåã¯ngDoCheck
èšå®ããã«_progressããŒcomponent_ã«ChangeDetectionStrategy.OnPush
芪compoentã«ã
ngDoCheck
2åå®è¡ãããŠããããšãããããŸããã
ç§ã¯æåã®ãã®ãå®è¡ãããçç±ãç¥ã£ãŠããŸãã
ããããç§ã¯2çªç®ã®ngDoCheck
ã«ã€ããŠæ¬åœã«æ··ä¹±ããŸãã...
@LiTiang ã
å ¥åã®1ã€ãå€æŽããããšãã«indicatorStyleïŒïŒãåŒã³åºãããçç±ããŸã ããããŸããã
ãã£ãšèª¬æããŠããããŸããïŒ
indicatorStyle()
ã¯ãã¥ãŒã§[ngStyle]
ã«ãã€ã³ããããŠãããããå€æŽæ€åºæ©èœãå®è¡ããããšåžžã«åŒã³åºãããŸãã ããã¯ãå
¥åãå®éã«å€æŽããããã©ããã«é¢ä¿ãªãçºçããŸãã
ngDoCheckã2åå®è¡ãããŠããããšãããããŸããã
ç§ã¯æåã®ãã®ãå®è¡ãããçç±ãç¥ã£ãŠããŸãã
ããããç§ã¯2çªç®ã®ngDoCheckã«ã€ããŠæ¬åœã«æ··ä¹±ããŠããŸã...
ããã¯ããã®ã¹ã¬ããã§åè¿°ããããã«ãå€æŽæ€åºãéçºã¢ãŒãã§åžžã«2åå®è¡ãããããã§ããå¯èœæ§ããããŸãã ããã¯ãå€æŽæ€åºäžã«ãã€ã³ãã£ã³ã°ãå€æŽããã³ãŒãããªãããšã確èªããããã«è¡ãããŸããããã«ãããæ¬çªç°å¢ã§é£ãããã°ãçºçããå¯èœæ§ããããŸãã
åçãª<ul>ãããã¯ã®é«ãã§ããcompanionHeightãã«ãã€ã³ããã<img>ã®é«ããå¶åŸ¡ãããã£ãã®ã§ãã
ãšãŠãéªæªã§ã...ãããã以äžã¯Observableã䜿çšããŠåäœããŸãã
<ul class="title-list-ul" #listul (window:resize)="setCompanionHeight(listul)">
<img class="title-list-companion-img" [src]="getCompanionImageURL()" [height]="companionHeight"/>
import { Component, OnInit, AfterViewChecked, ElementRef } from '@angular/core'; // redacted
import { Observable } from 'rxjs';
@Component({
selector: 'resume-title-list',
templateUrl: './title-list.component.html',
styleUrls: ['./title-list.component.scss']
})
export class TitleListComponent implements OnInit, AfterViewChecked {
private error: Object;
private companionHeight: number = 0;
private companionHeightLast: number = 0;
// Lots of irrelevant stuff like ngInit redacted for simplicity.
constructor(private elementRef: ElementRef) { } // redacted, mine is more complicated.
setCompanionHeight(listElement: any) {
let clientRect = listElement.getBoundingClientRect();
if (clientRect) {
this.companionHeight = clientRect["height"];
}
}
// window::resize only happens when the window is resized: This is an initialization
// function that sets the initial size of the image... Without it the image height is
// initially zero and the image is not shown.
// The height was not correct in ngAfterViewInit, so I used ngAfterViewChecked instead.
ngAfterViewChecked() {
let ularray = this.elementRef.nativeElement.getElementsByClassName("title-list-ul");
if (ularray && ularray.length > 0) {
let h = ularray[0].getBoundingClientRect().height;
if (h && h != this.companionHeightLast) {
this.companionHeightLast = h;
Observable
.of(h)
.delay(10)
.subscribe(h => this.companionHeight = h,
error => this.error = error);
}
}
}
}
ã¯ããŒãºãããåé¡ã«é¢ããã³ã¡ã³ãã¯ãAngularããŒã ã¡ã³ããŒã«ãã£ãŠèªã¿åãããªãå ŽåããããŸãã
ãããã®ãã£ãã«ã®1ã€ã«è³ªåãæçš¿ããã®ã¯ã©ãã§ããïŒè²¢ç®-質åãŸãã¯åé¡ããããŸããïŒ ãã©ã³ã«ãŒã§åçŸããŸããïŒ
ç§ã¯åãåé¡ãæ±ããŠããŸããïŒ
<div *ngIf="isLoading">
<app-some-viewchild></app-some-viewchild>
</div>
代ããã«* ngIfã䜿çšããŠåé¡ã解決ããŸãã
ç§ããã®åé¡ã«ééããŸããã æåŸã«ãããã©ã«ãã®åæåãªããžã§ã¯ããngModleãªããžã§ã¯ããšåãã§ããããšãããããŸããã
@Component
ãã³ã¬ãŒã¿ã§changeDetection: ChangeDetectionStrategy.OnPush
ãèšå®ãããšãä¿®æ£ãããŸãã
@elvismercadoããããšãã2.1.1ã§ç§ã®åé¡ã解決ããŸãïŒ
芪ãã³ãã¬ãŒãããæž¡ãããå€ã«äŸåããåã³ã³ããŒãã³ããããã芪å€ãå€æŽããããšãã«åãã³ãã¬ãŒãããã®äŸå€ãã¹ããŒããŸããã åã³ã³ããŒãã³ãã«ææ¡ãè¿œå ãããšãå€æŽãããå€ãåã³ã³ããŒãã³ãã«ããã·ã¥ããããŸã§å€æŽæ€åºãå®è¡ããããæ€åºãææå°æ©ã«å®è¡ãããã®ãåé¿ã§ããŸããïŒ
ãã©ãŒã«ã¹ã®ããå
¥åãããããããDOMïŒngIfæ¡ä»¶ïŒããåé€ãããšãããã§ãã¯åŸã«åŒãå€æŽãããŸããããšãããšã©ãŒãçºçããŸãïŒå
¥åã«ãã©ãŒã ã°ã«ãŒããé¢é£ä»ããããŠããå Žåã®ã¿ïŒã
ãã®åé¡ã®ãã©ã³ã«ãŒã¯æ¬¡ã®ãšããã§ãã
https://plnkr.co/edit/dooRvC1gY1WEcaNdshoP?p=preview
ããããšãïŒ
ã§ã¯ãããã§ã®è§£æ±ºçã¯äœã§ããïŒ
ngOnInitã®å ¥åå€ãå€æŽãããšããããããªã¬ãŒãããŸãã
@coli
å
ãã ã
setTimeout(()=>{
///your code here
}, 1);
ãŠãŒã¶ãŒãæ¢åã®ãšã³ãã£ãã£ãç·šéãããšãã«ããªããŒãããå¿
èŠãããåã³ã³ããŒãã³ãã®çµã¿åããããããŸãã
äžèšã®@drewlioæçš¿ã䜿çšããŠåé¡ãä¿®æ£ãããŸã§ãç§ã¯ãã®åé¡ã«äœæéãèŠåŽããŠããŸããã
_changeDetectionRefãæ¿å ¥ããŸãïŒ
constructor(
private _changeDetectionRef: ChangeDetectorRef) {
}
ãããŠãå€æŽãè¡ã£ãçŽåŸã«ãdetectchangesãåŒã³åºããŸãã
ããã¯ç§ã«ãšã£ãŠããªãã¯ã§ããã
setSizeFromCtrl() {
console.log("setSizeFromCtrl");
if (this.sizeFromList && this.tradeProfile && this.tradeProfile.SizeFrom && this.sizeFromCtrl) {
this.sizeFromCtrl.select(String(this.tradeProfile.SizeFrom));
this._changeDetectionRef.detectChanges();
console.log("setSizeFromCtrl DONE");
}
}
setCentreTypeCtrl() {
console.log("setCentreTypeCtrl");
if (this.centreTypeList && this.tradeProfile && this.tradeProfile.centreTypeList && this.centreTypeCtrl) {
for (let i of this.tradeProfile.centreTypeList) {
this.centreTypeCtrl.select(i.value);
}
this._changeDetectionRef.detectChanges();
console.log("centreTypeCtrl DONE");
}
}
ç§ã¯ãããšåãåé¡ãæ±ããŠããŸããããç°ãªãïŒé¡äŒŒããïŒïŒåå ãšç°ãªã解決çãæã£ãŠããããšã«æ³šæããŠãã ããã
ngOnInit()
å
ã®è€æ°ã®ã³ã³ããŒãã³ãã«ãã¹ããããŠæ§ç¯ãããã¢ãã«ãªã¢ã¯ãã£ããã©ãŒã ããããŸãã ãããã®ãã©ãŒã ã®äžéšã¯ããã³ãã¬ãŒãã®ngIf
ã§æããããŸããŠããŸãngOnInit()
ãšããŠé©çšãããŠããtheModelForm.patchValue(data)
ngOnInit()
ã§äœæãããå±éããããŸã§èµ·åãããªãã£ããããDOMãæ§ç¯ãããªãã£ããšããäºå®ã«é¢é£ããŠããŸãã patchValue()
ãåãåºããšãåé¡ã¯è§£æ±ºããŸããpatchValue()
ã§å®è¡this._changeDetectionRef.detectChanges();
ã ãããŠã ngIf
ã[hidden]
ããŠããã©ãŒã ãšDOMãå®å
šã«æ§ç¯ãããããã«ããŸãã ããã®æ¬ ç¹ã¯ãå®å
šãªãã©ãŒã ãšé¢é£ããDOMãäœæããããããæéãšã¡ã¢ãªã®ã³ã¹ãã§ãïŒããã¯å€ãã®ã¢ããªã§ã¯åé¡ã«ãªããªããããããŸãããã巚倧ãªãã©ãŒã ãããã®ã§ç§ãã¡ã«ãšã£ãŠã¯åé¡ã§ããïŒãpatchValue()
ïŒãŸãã¯ããŒã¿ãšãã£ãŒã«ãã1ïŒ1ã®å Žåã¯setValue()
ïŒãé©çšããããšã§ãããããã£ãŠããã©ãŒã ãngOnInit()
äœæãããå Žåã«ã®ã¿çºçããŸãã ãç§ã¯ãŸã ãããã®å€æŽãã³ãããããŠããŸããïŒ22/3/17ïŒã
ã§ãããããã®æ±ºå®ããã¹ãŠã®äººãæããšã¯æããŸããã
ããããç§ã§ã¯ãäžãããããšã©ãŒã®çºçã¯ãã¯ã©ã¹ã®æ°ããèŠçŽ ã®äœæã䌎ããŸããã 次ã«ããããé
åã«è¿œå ããŸããé
åã¯* ngForãä»ããŠåºåãããŸãã
ãã®åé¡ã解決ããã«ã¯ãã¯ã©ã¹ã«ã³ã³ã¹ãã©ã¯ã¿ãŒãè¿œå ããŸããã³ã³ã¹ãã©ã¯ã¿ãŒã¯ããã³ãã¬ãŒãã«ããã©ã«ãå€ïŒãŒãã空ã®è¡ïŒã衚瀺ããããã«å¿
èŠãªãã£ãŒã«ãã«å
¥åãããŸãã
export class Task {
task_id: number;
....
constructor() {
this.task_name = '';
this.task_desc = '';
this.task_percent = 0;
addNewTask():void{
let newTask = new Task();
this.tasksList.push(newTask);
}
task_nameïŒtask_descïŒtask_percentãã³ãã¬ãŒãã«è¡šç€ºããŠããŸãã ãªã¹ãããããã£ãŒã«ãã®å°ãªããšã1ã€ãã³ã³ã¹ãã©ã¯ã¿ãŒã§åæåãããŠããªãå Žåãåæ§ã®ãšã©ãŒãçºçããŸãã
+1
AerisG222ãœãªã¥ãŒã·ã§ã³ã®äœæ¥
constructor(private _changeDetectionRef : ChangeDetectorRef) { }
ngAfterViewInit() : void {
// your code
this._changeDetectionRef.detectChanges();
}
this._changeDetectionRef.detectChangesïŒïŒã¯æ©èœããŸãããç§ã®å Žåã¯ä»ã®åé¡ãçºçããŸãã setTimeoutïŒïŒé¢æ°å ã«ã³ãŒããã©ããããã ãã§ãããã解決ãããŸãã
@GuofuHuangããããè¡ãããšã¯ãåé¡ãä¿®æ£ããªãããšãåé¿ããæ¹æ³ã§ãããç¡éã®å€åæ€åºãµã€ã¯ã«ã«ã€ãªããå¯èœæ§ããããŸã
@Toxicableç³ãèš³ãããŸããããããããç§ã¯ãããæ確ã«ããŸããã§ãããç§ã¯this._changeDetectionRef.detectChangesïŒïŒ;ã䜿çšããŠããŸããã 代ããã«ããœãŒã¹ã³ãŒããsetTimeoutïŒïŒå ã«ã©ããããŸãã
@GuofuHuang setTimeout
äžã«äœãå
¥ããŠãCDãçºçãããããã©ã€ããµã€ã¯ã«ããã¯ã§å®è¡ããŠããå Žåã¯ãç¡éã®CDãµã€ã¯ã«ãçºçããŠããå¯èœæ§ããããŸãã 解決çã¯ãCDã®å®è¡äžã«CDãåŒãèµ·ããå€æŽãå ããããšã§ã¯ãããŸãã
@Toxicable 0ã«èšå®ããŠãïŒ
@GuofuHuang 0ã«èšå®ãããšCDãçºçããå Žåã¯ãã¯ã
@Toxicableãã®ãªã³ã¯http://stackoverflow.com/questions/779379/why-is-settimeoutfn-0-sometimes-usefulãèŠã€ããŸãããsetTimeout0ã¯Cã®pause / yieldã®ãããªãã®ã§ãããããCDãåŒãèµ·ãããã©ããã¯ããããŸããããä»ã§ã¯ç§ã®å Žåã¯å®ç§ã«æ©èœããŸãã ãã®è§£æ±ºçã§ãªãå Žåããã®åé¡ã解決ããããã®ããè¯ã解決çããããŸããïŒ
@GuofuHuang Cã§pause / yieldãäœãããã®ãããããŸããããJSã§ã¯ã€ãã³ããã¥ãŒã®æåŸã«ã³ãŒã«ããã¯ãé 眮ããŸãã ç§ã®è§£æ±ºçã¯äžèšã®ãšããã§ãïŒè§£æ±ºçã¯ãCDã®å®è¡äžã«CDãåŒãèµ·ããå€æŽãå ããããšã§ã¯ãããŸãã
settimeoutã解決çã§ã
msãã©ã¡ãŒã¿ãæå®ããå¿
èŠã¯ãããŸããã1ãã£ãã¯åŸ
ã¡ãŸã
@ zigzag95 @GuofuHuang setTimeout
ã解決çã§ã¯ãªãçç±ã«ã€ããŠã¯ããã®äŸãåç
§ããŠãã ãã
https://plnkr.co/edit/dv8K9EvVQLG59Gxsl3oI?p=preview
@ToxicableããããšãããããŸãããç§ã®å Žåã¯ãããšã¯å€§ããç°ãªããç¡éã«ãŒãã¯èŠãããŸããã ããããããã¯ééããªãè¯ãäŸã§ãããè§åºŠãããç解ããã®ã«åœ¹ç«ã¡ãŸãã
@GuofuHuang確ãã«ã1åã ãåŒã³åºãããngAfterViewInit
ã§å®è¡ããŠããããããã®ãããªã±ãŒã¹ã§ã¯çºçããŸããã ç§ã®èšãããããšã¯ããã®æ¹æ³ã§ã¯ç¡éã«ãŒããçºçããå¯èœæ§ãããããã䜿çšããã®ã¯å±éºã ãšããããšã§ãã ããããã©ã³ã«ãŒã瀺ããŠããããšã§ãã
@moutonoããªãã®ããªãã¯ã¯ç§ãå©ããŠãããŸããïŒ ã©ããããããšãð
åé¡ã¯å€æŽæ€åºã®ããªã¬ãŒã«é¢ãããã®ã§ãããããngZoneã¢ã³ããŒããããpromiseã§ãããããpromiseã®è§£æ±ºãæ©èœããå¯èœæ§ããããŸãã ããã¯ç§ã®ããã«åããŠããŸãïŒ
ngAfterViewInit() {
Promise.resolve().then(() => your_code_here);
}
ãããsetTimeoutã¯æ©èœããŸããããã®ä¿®æ£ãæ°ã«å
¥ââããªãã£ãã®ã§ããç§ã®å Žåã¯ãEventEmitterã®å€ãå€æŽããŠããããšãåå ã§ããã
解決çã¯å€æŽã§ããprivate generalSubscriber: EventEmitter<any> = new EventEmitter<any>();
ã«private generalSubscriber: EventEmitter<any> = new EventEmitter<any>(true);
å€ã ããïŒ
ã€ãŸããã€ãã³ããšããã¿ãŒã¯éåæã§ã
https://angular.io/docs/ts/latest/api/core/index/EventEmitter-class.html
ããã«å¯Ÿãã解決çã¯ãããŸããïŒ ãªãééãããŠããã®ã§ããïŒ
æ¯åãã£ãã·ã¥ãã¯ãªã¢ããå¿ èŠããããŸã
ç§ã®å Žåãç»åã®èªã¿èŸŒã¿æã«ç»åã¹ã¿ãã眮ãæããŠããã®ã§ã setTimeout
ã«å
¥ããå¿
èŠããããŸãã
@intergleam @ wasa4587 @ caroso1222 @tandu @ AerisG222 @ drew- moore @robwormald @ svi3c @ pkozlowski-opensource @pcroc @zoechi @stefankoru @bennadel @bryanforbes @Necroskillz @drewlio @ElsewhereGames @zoechi @ user414 @ e-oz
éçºäžã«ãšã©ãŒãçºçããŸãã æ¬çªãµãŒããŒã§ã¯æ£åžžã«åäœããŠããŸãã
@smartHasmukhããã¯éçºã¢ãŒãã®ã¿ã®ãšã©ãŒã§ããããã
ããªãã¯ãŸã ãããä¿®æ£ããå¿
èŠããããŸãã
ãã®ãšã©ãŒãçºçããå Žåã¯ãããããäžæ¹åã®ããŒã¿ãããŒãäžæãããŸãã ããã¯ãå
åŒã®1ã€ã®ã³ã³ããŒãã³ãã®ããŒã¿ãå€æŽããããåã®ã©ã€ããµã€ã¯ã«ããã¯ã§èŠªã®ããŒã¿ãå€æŽããããããããªãã®ã§ããå¯èœæ§ããããŸãã
ã¹ããŒããããã®äŸå€ã¯ãšã©ãŒã§ã¯ãããŸããããéçºè
ãäžæ¹åã®ããŒã¿ãããŒã³ã³ãã©ã¯ããäœããã®æ¹æ³ã§ç ŽãããŠããããšãç解ããããã®ãã«ããŒã§ãã ãããæ¬çªç°å¢ã§æ©èœãããšããäºå®ã¯å¶ç¶ã§ãã芪åéä¿¡ã§ããŒã¿ãã©ã®ããã«å€æŽããŠãããã確èªããéçºã¢ãŒãã§ä¿®æ£ããå¿
èŠããããŸãã
@smartHasmukhç§ããããäžå¿«ã«æããŠããŸããã ããšãã°ãããã²ãŒã·ã§ã³ã€ãã³ãã«ããã¯ããããã«ã€ãã³ããã¡ã€ã³ã³ã³ããŒãã³ãã«çºè¡ããŠãããŒããŒã衚瀺ããŸãã ãããŠãåã³ã³ããŒãã³ãã§ããµãŒããŒããããŒã¿ãåä¿¡ããåŸïŒã€ãŸãããµãã¹ã¯ãªãã·ã§ã³å ã§ïŒããã®ããŒããŒãé衚瀺ã«ããŸãã ããã¯ããã§ãã ãããã1ã€ã®ã³ã³ããŒãã³ãã§ã¯ããéçããœãŒã¹ããäžéšã®ããŒã¿ããååŸã§ãããããã§ã¯èŠ³æž¬ã§ããŸããã§ããããã®ãããngOnInitã䜿çšããŠãããŒããŒãé衚瀺ã«ããããã«ã¡ã€ã³ã³ã³ããŒãã³ãã«æ瀺ããããšããŸããã ãã¡ããããšã©ãŒãçºçããŸããã
ç§ã®å Žåã¯åçŽãªããšã§ãããããã¯æ£ããæ¹æ³ã§ã¯ãããŸããã ãã®ã³ã³ããŒãã³ãã«ã€ããŠã¯ãããããããŒããŒã衚瀺ããªããšãã決å®ãäžããªããã°ãªããŸããã§ããïŒãã®ãããªã³ã³ããŒãã³ãããã£ãšãããšãããã«ããªãããŒã«ãªãå¯èœæ§ããããŸãïŒ...ãŸãã¯ãããŒã¿ãµãŒãã¹ããããŒããŒãé衚瀺ã«ããããšãã§ããŸããã³ã³ããŒãã³ãã¬ãã«ã§ã¯ãªãã ãŸãã¯ãéãä¿®æ£ã¯ããã®1ã€ã®ç¹å®ã®ã±ãŒã¹ãsetTimeoutïŒïŒã§ã©ããããããšã§ãã æåã®ã¢ãããŒããé©åã§ã¯ãªãã£ãããã§ãã
TL / DRïŒ
_setTimeoutïŒïŒ_éãä¿®æ£ïŒãã®ç¬éã«_æ²ããããšã«_éžæããŸãããããããéåžžã«åçŽãªã·ããªãªã§ãããäœãäœã§ããããç¥ã£ãŠããŸãïŒä»¥å€ã«ãã·ããªãªã«ãé©åãªæ¹æ³ãå¿
èŠã ãšç¢ºä¿¡ããŠããŸããããã«é²ãã§ããŸã-ããã§ããå°æ¥ã®ãªãªãŒã¹ã§ãããæç¹ã§å€æŽããå¿
èŠããããããããŸããïŒã
ç¹å®ã®ã±ãŒã¹ã§StackOverflowãè©ŠããŠã詳现ã確èªã§ããŸãã æ¹æ³ããªããã°ãªããŸããã
確ãã«ããããšã@ MrCroft @ tytskyiãããŠç§ã¯ããããããŸã@zoechiãããããŠç§ã¯ãããé©ãããšã§ã¯ãªãããšãç¥ã£ãŠããŸãã ããããç§ã¯ãã ç¥ãããŸãã ä»ã«ã¯äœããããŸãã
@tytskyi
ãããæ¬çªç°å¢ã§æ©èœãããšããäºå®ã¯å¶ç¶ã§ãã確èªããå¿ èŠããããŸã
ããããã»ãšãã©ã®å Žåããã®ãšã©ãŒã«å¯Ÿããç§ã®å¿çã¯ãã¯ããããã£ãŠããŸããããã¯æå³ããããã®ã§ããã§ãã ç§ã®ã¢ããªã®å€ãã®ã³ã³ããŒãã³ãã¯ãinitã®åŸãããã³ãã€ã³ããããå€æ°ã§æ°ããå€ãåãåã£ãåŸã«äœããããŒãããŠããŸãã ãã®åé¡ã¯Angularã®ãæ¢ç¥ã®éããã§ããã誰ãæ°ã«ããŸããã
@ e-ozã©ã€ããµã€ã¯ã«ããã¯ã®ããããã§èŠªãŸãã¯å åŒã®ç¶æ ã«äœããã®åœ±é¿ãäžããŠããå Žåãããã¯äžæ¹åã®ããŒã¿ãããŒã®äžæã§ãã ãã®ãããªå€æŽã¯ãã¢ããªã±ãŒã·ã§ã³ã®ç¶æ ãå®å®ãããšãã«è¡ãå¿ èŠããããŸãããå€æŽã®æ€åºã®éäžã§ã¯ãããŸããã ãã®ãããmicrotaskãsetTimeout0ãªã©ã®ããªãã¯ããããŸãã
@tytskyiã¯ããªãã®ã
@ e-ozããã¯HTTPãªã¯ãšã¹ãã«ã©ã®ããã«é¢é£ããŠããŸããã HTTPèŠæ±å¿çã«ããå€æŽãæ€åºããããåŒãå€æŽãããŸãã...ããšãããšã©ãŒã¯çºçããŸããã
詳现ãæããŠããã ããŸããïŒ
@zoechiããã«æéãç¡é§ã«ããçç±ã¯ãããŸããã誰ãäœãå€æŽããŸãããã¿ã¹ã¯ã¯éããããŸãã
@ e-ozãã®åé¡ã¯1幎åã«ã¯ããŒãºãããAngularããŒã ã¯åœæãŸã£ããç°ãªãåªå
é äœãæã£ãŠããŸããïŒãªãªãŒã¹ããªãªãŒã¹ããŸãïŒããã®åé¡ã¯åœæã®ãããã«ãŒã§ã¯ãããŸããã§ããã
æå¹ãªã±ãŒã¹ããããšæãããå Žåã¯ãæ°ããåé¡ãäœæããå¿
èŠããããŸãã
@zoechiç§ãäœããã¹ãããããªãã決ããã®ã§ã¯ãªããšæããŸãã æ°ããåé¡ãäœæããããšã¯ã§ããŸãããäœæããå¿ èŠã¯ãããŸããã æ¬æãè¡šããŠãç§ã¯ãã®ãããªãããã¹ãããšããå£èª¿ã奜ãã§ã¯ãããŸããã
@ e-ozãªãã»ã©ãããªãã®ã³ã¡ã³ãã¯ããªãã®æ¬²æ±äžæºã解æ¶ããããã ãã®ãã®ã§ãããããªãã¯è§£æ±ºçãåŸãããšã«èå³ããããŸããã ããªãã®åœ¹ã«ç«ããªãã³ã¡ã³ãã§ããã§ä»ã®äººã ã®æéãç¡é§ã«ããã®ãæ¢ããŠãã ããã
httpãåŒã³åºãå Žåã¯ãã³ã³ããŒãã³ãã«ãµãã¹ã¯ã©ã€ãããè¿œå ããã ãã§ãã
Promise.resolve().then(() => your_code_here);
ãŸãmyObservable.delay(10).subscribe(...)
2ã€ã®è§£æ±ºçã®ãããããåé¡ã解決ããŸã
@vicbä¿®æ£ãããŠããªãåé¡ã®
å°ãªããšãããã€ãã®é©åãªä¿®æ£ãææ¡ããŸããããããéããããšã¯åãå ¥ããããŸãã
@diegogarciaa ...ãããŠãããªãã®èŠ³ç¹ãããæ£ç¢ºã«ä¿®æ£ãããŠããªãããŸãã¯ééã£ãŠãããã®ã¯äœã§ããïŒ äŒè©±^^^ã¯ãšãŠãé·ãã®ã§ãå®éã®ã³ã¢ãèŠã€ããã®ã¯é£ããã§ãã
@ mlc-mlapisæ¬æãè¡šããŠãç§ã¯ããªãã®å çã§ã¯ãããŸãããåé¡ãèªãã ãç解ãããã§ããªãå Žåã¯ãæ°ã«ããªãã§ãã ããã ç§ã¯ãã¹ãŠã®ã³ã³ãã³ããèªãã®ã«é·ãæéãè²»ãããŸãããç§ã¯åãããšããå§ãããŸãã
è§åŒµã£ãããŒã ïŒãã¹ãŠã®ããŒã ã§ã¯ãããŸããããããã§ãã®åé¡ã解決ããŠãã人ïŒã®æ 床ã¯éåžžã«æ欲çã§ãïŒïŒç§ã®çµŠæãïŒãããã¯ãããããã«ä¿®æ£ããŸããã
@diegogarciaa ...ãšãŠãè¯ãã äžèšã®ããã«ç¶ããã°ãã©ãã§ãæè¿ãããŸãã
@ mlc-mlapisç§ã¯ã人ã ãèªãããšãã§ããªãå Žæãæè¿ããããªãããã¹ãã§ãªãå Žæã§ã§ããããããããšããŸãã
@diegogarciaa ...ç§ã¯ããªããå人çã«åé¡ãæ±ããŠãããšæã£ãŠããŸããããä»ã¯ããã§ã¯ãªãããã§ãã ãŸãã Expression has changed after it was checked ...
ã®åé¡ã®ã»ãšãã©ã¯ãã°ã§ã¯ãªããCDã®åäœãæ£ããç解ããŠããªããšããã®ãçŸå®ã§ãã
@ mlc-mlapis ok ...ç解ããŸããã
http://plnkr.co/edit/nm8OkrpZCIp4cvA6TbpO?p=preview
ãã®ãã©ã³ã¯ã§ã¯ãngAfterViewInitãåŒã³åºããããšãã«å€æ°ããã€ã³ããããŠãã§ãã¯ãããããšãããããŸãããããã£ãŠãæ°ããå€ãåãåããæ°ãããã§ãã¯ã©ãŠã³ããããªã¬ãŒããªããšãäŸå€ãã¹ããŒãããŸãã
ããããããšãã°ããã¥ãŒã³ã³ããåç §ããããããšãã°æ¬¡ã®ããã«äœ¿çšããå ŽåïŒ
this.service.GetDataïŒïŒãsubscribeïŒ
å¿ç=> this.component.instance.dataModel =å¿ç
ïŒ;
dataModelãç§ã®htmlã§{{dataModel.Field}}ãšããŠäœ¿çšãããŠããããšãèæ ®ããŠãã ãã
this.componentã¯ãç¹å®ã®ã€ãã³ãã§ããŒããããåçã³ã³ããŒãã³ãã§ããããšã©ãŒãåé¿ããã«ã¯ã©ãããã°ããã§ããïŒ ããã¯ãå€æŽæ€åºã®ã©ã€ãã·ã¯ã«ããã¯ã®åã«ããŒã¿ãã³ã³ããŒãã³ãã«æž¡ãæ£ããæ¹æ³ã§ãã
@diegogarciaa ...ã¯ããããã¯éåææäœãšåææäœãæ··åšããŠ1æã®CDã«ãŸãšããããhttps://hackernoon.com/everything-you-need-to-know-about-the-expressionchangedafterithasbeencheckederror-error-e3fd9ce7dbb4ã®æçš¿ããã®èª¬æã¯ç¹°ãè¿ããªãã®ã§ãæåã«èªãã§ã¿ãŠãã ããã
ãŸãã httpsïŒ//hackernoon.com/here-is-how-to-get-viewcontainerref-before-viewchild-query-is-evaluated-f649e51315fbãåç §ããŠ
ãããã£ãŠããã®èšäºã§ã¯åºæ¬çã«ãå€æŽæ€åºã®ã©ãŠã³ããæåã§åŒã³åºãå¿ èŠããããšè¿°ã¹ãŠããŸã...
æ£çŽã«èšã£ãŠãç§ã¯çŸåšã®ç¶æ³ã«éåžžã«è ¹ãç«ãŠãŠããŸã...è§åºŠã®ããæå°éã®ãã®ã§ããããšãŠãéå±ã§ç²ããŠããŸã...ç§ã¯æ¯ããã§ããŸããã ããªãããã¡ãã¯
@diegogarciaa ...ããããããã¯åãªãè£å©çãªè§£æ±ºçã§ãã promise.then
ãŸãã¯setTimeout
䜿çšããããšãã§ããŸã...ãã ãããã®å Žåã®æšå¥šããã解決çã¯ããããå
±æãµãŒãã¹ã§ãããããCDãµã€ã¯ã«å
šäœã§åçã³ã³ããŒãã³ãã®ããããã£ãçŽæ¥æŽæ°ããããšã¯ãããŸããã確èªã
ãŸãã¯ãããŒã¿ãååŸããç¬éã«åçã³ã³ããŒãã³ãã®ã€ã³ã¹ã¿ã³ã¹ãäœæããã ãã§ãã ãããã£ãŠããµãã¹ã¯ãªãã·ã§ã³ã¯åçã³ã³ããŒãã³ãã€ã³ã¹ã¿ã³ã¹ã®äœæãåŒã³åºããŸãã
ããããéèŠãªããš->ãšã©ãŒãçºçããäž»ãªããžãã¯->äžæ¹åã®å€æŽã¯åžžã«ããªãŒå šäœãäžããäžã«æµããå¿ èŠãããã1ã€ã®CDãµã€ã¯ã«ã®åŸãäžæ¹åã®ååãå°éããããšããã¹ããŒã¿ã¹ã®ç¢ºèªããããŸãã
ãã®ããã¡ãã¯ãŠãŒãã¯å人çãªãã®ã§ã¯ãããŸããã§ãã...ãã ç§ã®æ¬²æ±äžæºãçºæ£ããŸããã
ã³ã³ããŒãã³ããåŠçããããã«ãã£ã¬ã¯ãã£ãã¹ããŒãã䜿çšããŸãã ã³ã³ããŒãã³ããã³ã³ããŒãã³ããã¥ãŒåç §ã«ããŒããããã«ããŒãäœæããŸãããç解ããŠããããã«ãã³ã³ããŒãã³ãã®ããŒãæã«ããŒã¿ã䜿çšå¯èœã§ããå¿ èŠããããŸãã
protected loadPartialView(viewName: string, target: ViewContainerRef) : ComponentRef<any> {
const factories = Array.from(this.resolver['_factories'].keys());
const factoryClass = <Type<any>>factories.find((x: any) => x.name === viewName);
const factory = this.resolver.resolveComponentFactory(factoryClass);
return target.createComponent(factory);
}
äžèšã®äŸã§ã¯ã次ã®ãããªããšãããããšæããŸãã
return target.createComponent(factory, dataSource);
ç§ã®dataSourceãã³ã³ã¹ãã©ã¯ã¿ãŒæã«å©çšã§ããå Žæ
ã³ã³ããŒãã³ããééããããŒã¿ãœãŒã¹ãåŠçããããã«ãªããžã§ã¯ãã䜿çšããreduxã®ããã«ãã©ã€ãã·ã¯ã«ãããã¯ããåã«ããŒã¿ãååŸã§ããããã«ãããŒã¿ãåŠçããæ³šå ¥å¯èœãªã³ã³ããŒãã³ããå®è£ ããããšãæ€èšããŠããŸãã
ãã£ãšãŽã¬ã«ã·ã¢
以åã«ããŒã¿ãå©çšå¯èœã§ããå¿
èŠã¯ãªããšæããŸã...åçã³ã³ããŒãã³ãã¯ãŸã @Input()
ãš@Output()
ã³ã³ããŒãã³ãã§ãããåé¡ã¯ãã€ããŒã¿ãå€æŽãããã§ãã
...ã³ã³ããŒãã³ããããŒããããŠãããšãã«ããŒã¿ãå©çšå¯èœã§ããå¿ èŠããããŸã...
é 延ããŒããããã¢ãžã¥ãŒã«ã®ã³ã³ããŒãã³ãã䜿çšããå¿ èŠããããšæãã®ã§ãã¢ãžã¥ãŒã«å ã§çŽæ¥ãããã䜿çšããŠãæåååã ãã䜿çšããŠã³ã³ããŒãã³ãã«ã¢ã¯ã»ã¹ã§ããããã«ããŸãã
export default class LazyLoadedModule {
cmps: Map<{}, {}> = new Map();
constructor() {
this.cmps.set('first-component', FirstComponent);
...
}
}
return target.createComponent(factory, dataSource);
ã¯ã©ãããæå³ã§ããïŒ å®éã®APIã¯createComponent(componentFactory, index, injector, projectableNodes, ngModule)
ã§ãã
ãããŠå€åæ°ãã@angular / cdkã¢ãžã¥ãŒã«ã¯ããªãã«ãšã£ãŠèå³æ·±ãã§ãããã ããã§çŽ¹ä»ããŸãïŒ https ïŒ//medium.com/@caroso1222/a-first-look-into-the-angular-cdk-67e68807ed9bã
setTimeout
ã䜿çšãã代ããã«ã ChangeDetectorRef.detectChanges()
ããŠãããŸããããªãã£ãã®ã§ããã®äŸ¡å€ãšèª°ããå©ããããšãã§ããã®ã§ããã°ã NgZone.onStable
ã䜿çšããŠã³ãŒããå®è¡ããããšã«ãªããŸããã EventEmitter
1åãµãã¹ã¯ã©ã€ãããããšã«ãã£ãŠ..ã
constructor(
private zone: NgZone,
) { }
ngAfterViewInit() {
this.zone.onStable.first().subscribe(() => {
// your code here
});
}
ç§ã¯ãããè¡ãããšã®çµæãå®å
šã«ã¯èªèããŠããŸãããã setTimeout
ã䜿çšãããããææªã«ãªãå¯èœæ§ããããŸããïŒ èª°ãããã®åé¡ã«ã€ããŠã³ã¡ã³ããæã£ãŠãããªããããã¯æ¬åœã«å€§æè¿ã§ãïŒ
@ AerisG222ãœãªã¥ãŒã·ã§ã³ã¯ç§ã®ããã«åããŸã
constructor(private _changeDetectionRef : ChangeDetectorRef) { }
ngAfterViewChecked() : void {
// your code
this._changeDetectionRef.detectChanges();
}
ããã¯htmlã³ã³ããŒãã³ãã§ãïŒ
{{lastData.note [i] .date | æ¥ä»ïŒ 'dd.MM.yyyy'}} | {{lastData.note [i] .date | æ¥ä»ïŒ 'HHïŒmm'}} ïŒ ïŒBFL15_200817 | {{lastData.status.name}} by {{lastData.note [i] .admin}} é åå ã®ããŒã¿ãè€æ°ããå Žåããšã©ãŒãçºçããŸããã解決çã¯ãããŸããïŒ
ããã¯ç¢ºãã«è€éãªåé¡ã§ãããå Žåã«ãã£ãŠã¯ïŒç¹ã«ãContentChildã®ããããã£ãå€æŽããå ŽåïŒãããžãã¯ãngAfterViewInitïŒïŒãŸãã¯ngOnInitïŒïŒã§ã¯ãªãngAfterContentInitïŒïŒã«ç§»åããããšã§è§£æ±ºã§ããŸãã
åçŽãªããšãè§åºŠã®æ··ä¹±ãåŒãèµ·ããå¯èœæ§ãããã®ã¯é©ãã¹ãããšã§ã
å¿é
ããªãã§ãã ãããä»ã®ã¿ããªãæ°ã¥ããŠããŸãð
@jakeNiemiec lame jobãtrollã誰ãAngularjsãæ€çŽ¢ããŠããŸãã
https://trends.google.com/trends/explore?date=all&q=Angular%20tutorialãReact%20tutorial
ã¯ããç§ã¯ããå€ãã®äººã ãå¿ æ»ã«ãªã£ãŠãè§åºŠã®ãããã¥ãŒããªã¢ã«ããã°ãŒã°ã«ã§æ€çŽ¢ããå¿ èŠããããšäºæ³ããŸãããããã£ãŠããæ··ä¹±ãã«ã€ããŠã®æåã®ã³ã¡ã³ãã§ãã
ãã ããå¿é
ããªãã§ãã ãããæ£ç¢ºãªäœ¿çšçµ±èšã«ã€ããŠã¯npmã確èªã§ããŸãïŒ //www.npmtrends.com/react-vs-@angular/cli -vs-vue-vs- @ angular / core
åé¡ã®éãæ¯èŒããã ãã§ãã ç§ã¯æ¬åœã«è§åºŠãè¯ããªãããšãæãã§ããŸãããVue.jsã¯é ãå°æ¥ãããééããã ãããšæããŸãã 3ã€ãã¹ãŠã§ããã°ã©ã ããã®ã§ãè§åºŠã®ããéçºè ã«ã¯Vueã匷ããå§ãããŸãã ãã€ã©ãŒãã¬ãŒãã®ãªãè§åŒµã£ããããªãã®ã§ãã
ããããŸããçãã¯åãå
¥ããããŸãããç§ã¯ãããã®çµ±èšã§å®å
šã«å
æ°ã§ãã
ã€ã³ãã§ã¯ãJavaãããPHPã䜿çšããŠãã人ãå
šäžçã§å€ããšæããŸãã 倧èŠæš¡ãªãšã³ã¿ãŒãã©ã€ãºã¢ããªã«PHPã䜿çšããã®ã¯ã°ããªã®ã§ãèªåã®é è³ã䜿çšããå¿
èŠããããŸãã人çã¯ããè¯ããªããŸãã
@jakeNiemiec ...äœæãããŠããåé¡ã®50ïŒ ã誀ã£ãŠããã«é 眮ãããŠããŸã...å®éã«ã¯ãµããŒã/ç¥èã®åé¡ã§ããããŸã£ããååšããŠã¯ãªããŸããã 楜ããã®ã¯ãå¿ èŠãªãããã¯ã®ã»ãšãã©ãå ¬åŒããã¥ã¡ã³ãã«éåžžã«ããææžåãããŠããããšã§ã+çãã¯JavaScriptã®ç¥èã«åºã¥ããŠããŸãã ãããããåç¥ã®ããã«ã人ã ã¯ããã¥ã¡ã³ããååã«æ·±ãèªãã§ããŸããã
@HostBindingã¯ããã®ãšã©ãŒã®çŽããããåå ã«ãªãå¯èœæ§ããããŸãã
@HostBinding('style.background')
ãªã©ã®ã³ã³ããŒãã³ãã®åçŽãªãã€ã³ãã£ã³ã°ã«ã€ããŠèããŠã¿ãŸãã
ãã®ããããã£ã¯ã *芪*ã³ã³ããŒãã³ãã®å€æŽæ€åºã«ãã£ãŠãããããææããããŠãããã®ããã«ãã§ãã¯ãããŸãã ç§ãã¡ã®èŠ³ç¹ããã¯ãããããã®ããããã£ããææãããåã³ã³ããŒãã³ããšèããããšæããŸãã
ããã§ããã®å Žåãã³ã³ããŒãã³ãããã§ãã¯ã®ããã«ããããã£ãé€å€ããæ¹æ³ãããã¹ãã§ããããã«æãããŸããïŒ ãããšããããããè€éã§ããïŒ
芪ã³ã³ããŒãã³ãã«detectChanges
å®è¡ãããïŒãŸãã¯åã«divãè¿œå ããïŒå¿
èŠããã£ãã®ã¯ãåã³ã³ããŒãã³ããåã«ç¬èªã®èæ¯è²ãå€æŽããã ãã®å ŽåïŒãããŠä»ã®å Žæã§ã¯æ±ºããŠå€æŽããªãå ŽåïŒã®ãšã©ãŒãåé¿ããããã§ãã ã
ããå®å šãªèª¬æïŒ https ïŒ
ãã®ã¡ãœããã®éã«å€æŽæ€åºã®å¥ã®ã©ãŠã³ããããªã¬ãŒããäœããäœããããå¿ èŠããããŸã-ã€ãã³ããçºè¡ããŸãã ã¿ã€ã ã¢ãŠãã§ã©ããããïŒng1ãžã®ãã¥ãŒãã©ãã·ã¥ããã¯:-PïŒã¯ãæ©èœãã1ã€ã®æ¹æ³ã§ãããng2ã§ã¯éåžžã«é¢åã§ãã
è§åºŠ4ã§ã¯ãããã¯4 me <3ã§åäœããŸã
ãã®åé¡ã¯ãéã¢ã¯ãã£ãã®ããã«èªåçã«ããã¯ãããŠããŸãã
åæ§ã®åé¡ãŸãã¯é¢é£ããåé¡ãçºçããå Žåã¯ãæ°ããåé¡ãæåºããŠãã ããã
èªåäŒè©±ããã¯ããªã·ãŒã®è©³çŽ°ãã芧ãã ããã
_ãã®ã¢ã¯ã·ã§ã³ã¯ãããã«ãã£ãŠèªåçã«å®è¡ãããŸããã_
æãåèã«ãªãã³ã¡ã³ã
ããã¯ãã°ã§ã¯ãªããæå³ãããšããã«æ©èœããéçºã¢ãŒãã®æ©èœã§ãã
enableProdMode( )
åŒã³åºã-ã¢ããªãããŒãã¹ãã©ããããŠäŸå€ãã¹ããŒãããªãããã«ãããšãã«ãæŽæ°ããããã©ã³ã¯ãåç §ããŠãã ããããšã¯ãããããã¯æ£åœãªçç±ã§ã¹ããŒãããŠããŸããã€ãŸããå€æŽæ€åºã®ãã¹ãŠã®ã©ãŠã³ãã®åŸãéçºã¢ãŒãã¯ããã«2çªç®ã®ã©ãŠã³ããå®è¡ããŠãæåã®ã©ãŠã³ãã®çµäºä»¥éã«ãã€ã³ãã£ã³ã°ãå€æŽãããŠããªãããšã確èªããŸããããã¯ãå€æŽãçºçããŠããããšã瀺ããŠããããã§ããå€åæ€åºèªäœã«ãã£ãŠã
ãã©ã³ã¯ã«ã¯ããã€ã³ãã£ã³ã°
[attr.spinner]=isLoading
ããããngAfterViewInit
ãèµ·åããããšãã«çºçãããthis.load()
ãžã®åŒã³åºãã®çµæãšããŠãisLoading
ãå€æŽãããŸããæåã®å€åæ€åºã¿ãŒã³ã®äžéšãšããŠçºçããŸãã ãã ããããèªäœã¯åé¡ã§ã¯ãããŸãããåé¡ã¯ãthis.load()
ããã€ã³ãã£ã³ã°ãå€æŽããããæ°ããã©ãŠã³ãã®å€æŽæ€åºãããªã¬ãŒããªãããšã§ããã€ãŸãããã®ãã€ã³ãã£ã³ã°ã¯ãå°æ¥ã®å€æŽæ€åºã©ãŠã³ããŸã§æŽæ°ãããŸããã