คำถามติดแท็ก angular2-changedetection

11
วิธีการตรวจสอบเมื่อมีการเปลี่ยนแปลงค่า @Input () ในเชิงมุม?
ฉันมีองค์ประกอบหลัก ( CategoryComponent ), องค์ประกอบย่อย ( videoListComponent ) และ ApiService ฉันมีการทำงานที่ดีที่สุดนี้คือแต่ละส่วนสามารถเข้าถึง json api และรับข้อมูลที่เกี่ยวข้องผ่านทาง observables ปัจจุบันองค์ประกอบรายการวิดีโอเพิ่งได้รับวิดีโอทั้งหมดที่ฉันต้องการที่จะกรองนี้เพื่อวิดีโอเพียงในหมวดหมู่เฉพาะอย่างยิ่งผมประสบความสำเร็จนี้โดยผ่าน CategoryID @Input()กับเด็กผ่านทาง CategoryComponent.html <video-list *ngIf="category" [categoryId]="category.id"></video-list> สิ่งนี้ทำงานได้และเมื่อมีการเปลี่ยนแปลงหมวดหมู่@Input()parentComponent หลักค่า categoryId จะถูกส่งผ่านผ่านแต่ฉันต้องตรวจพบสิ่งนี้ใน VideoListComponent และขออาร์เรย์วิดีโออีกครั้งผ่าน APIService (พร้อมกับ categoryId ใหม่) ใน AngularJS ฉันจะทำ a $watchบนตัวแปร วิธีที่ดีที่สุดในการจัดการกับสิ่งนี้คืออะไร?

5
เรียกการตรวจจับการเปลี่ยนแปลงด้วยตนเองในเชิงมุม
Mode(): stringผมเขียนเป็นองค์ประกอบเชิงมุมที่มีคุณสมบัติ ฉันต้องการที่จะสามารถตั้งค่าคุณสมบัตินี้โดยทางโปรแกรมไม่ได้ตอบสนองต่อเหตุการณ์ใด ๆ ปัญหาคือในกรณีที่ไม่มีเหตุการณ์ของเบราว์เซอร์การเชื่อมโยงแม่แบบ{{Mode}}จะไม่ปรับปรุง มีวิธีที่จะทริกเกอร์การตรวจจับการเปลี่ยนแปลงนี้ด้วยตนเองหรือไม่?

24
ExpressionChangedAfterItHeenBeenCheckedError อธิบายแล้ว
โปรดอธิบายกับฉันว่าทำไมฉันถึงได้รับข้อผิดพลาดนี้: ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. เห็นได้ชัดว่าฉันได้รับมันในโหมด dev เท่านั้นมันไม่ได้เกิดขึ้นในงานสร้างของฉัน แต่มันก็น่ารำคาญมากและฉันก็ไม่เข้าใจถึงประโยชน์ของการมีข้อผิดพลาดในสภาพแวดล้อม dev ของฉันที่จะไม่ปรากฏขึ้นบนผลิตภัณฑ์ - อาจเป็นเพราะฉันขาดความเข้าใจ โดยปกติการแก้ไขนั้นง่ายพอฉันเพิ่งตัดข้อผิดพลาดที่ทำให้เกิดรหัสใน setTimeout ดังนี้: setTimeout(()=> { this.isLoading = true; }, 0); หรือบังคับให้ตรวจจับการเปลี่ยนแปลงด้วยตัวสร้างเช่นนี้constructor(private cd: ChangeDetectorRef) {}: this.isLoading = true; this.cd.detectChanges(); แต่ทำไมฉันจึงพบข้อผิดพลาดนี้อยู่ตลอดเวลา ฉันต้องการที่จะเข้าใจเพื่อที่จะได้หลีกเลี่ยงการแก้ไขแฮ็กเหล่านี้ในอนาคต

14
@ViewChild ใน * ngIf
คำถาม วิธีที่ดีที่สุดในการรับ@ViewChildหลังจากองค์ประกอบที่เกี่ยวข้องในเทมเพลตถูกแสดงคืออะไร ด้านล่างเป็นตัวอย่าง นอกจากนี้ยังมีPlunker แม่แบบ: <div id="layout" *ngIf="display"> <div #contentPlaceholder></div> </div> ส่วนประกอบคือ: export class AppComponent { display = false; @ViewChild('contentPlaceholder', {read: ViewContainerRef}) viewContainerRef; show() { this.display = true; console.log(this.viewContainerRef); // undefined setTimeout(()=> { console.log(this.viewContainerRef); // OK }, 1); } } ฉันมีส่วนประกอบที่ซ่อนเนื้อหาตามค่าเริ่มต้น เมื่อใครบางคนเรียกshow()วิธีการมันจะมองเห็นได้ อย่างไรก็ตามก่อนการตรวจจับการเปลี่ยนแปลง Angular 2 เสร็จสมบูรณ์ฉันไม่สามารถอ้างอิงviewContainerRefได้ ฉันมักจะห่อการกระทำที่จำเป็นทั้งหมดไว้ในsetTimeout(()=>{},1)ที่แสดงข้างต้น มีวิธีที่ถูกต้องมากขึ้นหรือไม่? ฉันรู้ว่ามีตัวเลือกด้วยngAfterViewCheckedแต่มันทำให้เกิดการโทรที่ไร้ประโยชน์มากเกินไป คำตอบ …

8
อะไรคือ Angular ที่เทียบเท่ากับ AngularJS $
ใน AngularJS คุณก็สามารถที่จะระบุดูจะสังเกตเห็นการเปลี่ยนแปลงในตัวแปรขอบเขตการใช้ฟังก์ชั่นของ$watch $scopeอะไรคือสิ่งที่เทียบเท่ากับการเฝ้าดูการเปลี่ยนแปลงของตัวแปร (ในตัวอย่างเช่นตัวแปรองค์ประกอบ) ในเชิงมุม?

6
วิธีการบังคับให้มีการเรนเดอร์องค์ประกอบใหม่ใน Angular 2
วิธีการบังคับให้มีการเรนเดอร์องค์ประกอบใหม่ใน Angular 2 สำหรับจุดประสงค์ในการแก้ปัญหาการทำงานกับ Redux ฉันต้องการบังคับให้องค์ประกอบแสดงภาพอีกครั้งเป็นไปได้หรือไม่

3
ความแตกต่างระหว่าง markForCheck () และ detectChanges () คืออะไร
ความแตกต่างระหว่างChangeDetectorRef.markForCheck()และChangeDetectorRef.detectChanges()คืออะไร? ฉันพบข้อมูลเกี่ยวกับ SO เท่านั้นถึงความแตกต่างระหว่างNgZone.run()แต่ไม่ใช่ระหว่างฟังก์ชันทั้งสองนี้ สำหรับคำตอบที่มีการอ้างอิงถึงเอกสารเท่านั้นโปรดแสดงสถานการณ์จำลองที่เป็นประโยชน์บางอย่างเพื่อเลือกข้อใดข้อหนึ่ง
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.