).scope() เป็นเรื่องที่ค่อนข้างซับซ้อน อย่างไรก็ตามมันก็คุ้มค่าที่จะอ่านเนื่องจากคำเตือนเฮฮาประกอบขึ้นมา

ข้อผิดพลาดทั่วไป # 15: ไม่พึ่งพาระบบอัตโนมัติหรือพึ่งพามันมากเกินไป

หากคุณทำตามแนวโน้มในการพัฒนาส่วนหน้าและขี้เกียจแบบฉัน - คุณอาจพยายามที่จะไม่ทำทุกอย่างด้วยมือ การติดตามการอ้างอิงทั้งหมดของคุณชุดการประมวลผลไฟล์ในรูปแบบต่างๆการโหลดเบราว์เซอร์ซ้ำหลังจากบันทึกไฟล์ทุกครั้ง - มีอะไรให้พัฒนามากกว่าแค่การเข้ารหัส

ดังนั้นคุณอาจใช้ bower และอาจจะ npm ขึ้นอยู่กับว่าคุณให้บริการแอปของคุณอย่างไร มีโอกาสที่คุณอาจกำลังใช้อารมณ์ฮึดฮัดอึกหรือบรันช์ หรือทุบตีซึ่งก็เจ๋งดี ในความเป็นจริงคุณอาจเริ่มโครงการล่าสุดของคุณด้วยเครื่องกำเนิด Yeoman!

สิ่งนี้นำไปสู่คำถาม: คุณเข้าใจกระบวนการทั้งหมดของโครงสร้างพื้นฐานของคุณหรือไม่? คุณต้องการสิ่งที่คุณมีหรือไม่โดยเฉพาะอย่างยิ่งถ้าคุณใช้เวลาเพียงไม่กี่ชั่วโมงในการพยายามแก้ไขฟังก์ชันการเชื่อมต่อเว็บเซิร์ฟเวอร์ livereload?

ใช้เวลาสักครู่เพื่อประเมินสิ่งที่คุณต้องการ เครื่องมือทั้งหมดเหล่านี้มีไว้เพื่อช่วยเหลือคุณเท่านั้นไม่มีรางวัลอื่นใดสำหรับการใช้งาน นักพัฒนาที่มีประสบการณ์มากกว่าที่ฉันพูดคุยด้วยมักจะทำให้สิ่งต่างๆง่ายขึ้น

ข้อผิดพลาดทั่วไป # 16: ไม่รันการทดสอบหน่วยในโหมด TDD

การทดสอบจะไม่ทำให้รหัสของคุณปราศจากข้อความแสดงข้อผิดพลาด AngularJS สิ่งที่พวกเขาจะทำคือมั่นใจว่าทีมของคุณจะไม่ประสบปัญหาการถดถอยตลอดเวลา

ฉันเขียนเฉพาะเกี่ยวกับการทดสอบหน่วยที่นี่ไม่ใช่เพราะฉันรู้สึกว่ามันสำคัญกว่าการทดสอบ e2e แต่เป็นเพราะพวกเขาดำเนินการได้เร็วกว่ามาก ฉันต้องยอมรับว่ากระบวนการที่ฉันกำลังจะอธิบายเป็นกระบวนการที่น่าพึงพอใจมาก

ทดสอบการขับเคลื่อนการพัฒนาเป็นการใช้งานสำหรับเช่น นักวิ่งอึก - กรรมโดยทั่วไปจะเรียกใช้การทดสอบหน่วยทั้งหมดของคุณในทุกไฟล์ที่บันทึก วิธีที่ฉันชอบที่สุดในการเขียนข้อสอบคือฉันแค่เขียนคำรับรองที่ว่างเปล่าก่อน:

angular.reloadWithDebugInfo()

หลังจากนั้นฉันเขียนหรือสร้างรหัสใหม่จากนั้นฉันกลับมาที่การทดสอบและกรอกข้อมูลรับรองด้วยรหัสทดสอบจริง

การมีงาน TDD ที่ทำงานในเทอร์มินัลจะทำให้กระบวนการเร็วขึ้นประมาณ 100% การทดสอบหน่วยจะดำเนินการในเวลาไม่กี่วินาทีแม้ว่าคุณจะมีจำนวนมากก็ตาม เพียงบันทึกไฟล์ทดสอบแล้วนักวิ่งจะหยิบขึ้นมาประเมินการทดสอบของคุณและให้ข้อเสนอแนะทันที

ด้วยการทดสอบ e2e กระบวนการจะช้าลงมาก คำแนะนำของฉัน - แยกการทดสอบ e2e เป็นชุดทดสอบและเรียกใช้ทีละรายการ ไม้โปรแทรกเตอร์รองรับพวกเขาและด้านล่างนี้คือรหัสที่ฉันใช้สำหรับงานทดสอบของฉัน (ฉันชอบอึก)

var injector = $(document.body).injector(); var someService = injector.get('someService');

ข้อผิดพลาดทั่วไป # 17: ไม่ใช้เครื่องมือที่มีอยู่

A - จุดพักโครเมี่ยม

เครื่องมือนักพัฒนา Chrome ช่วยให้คุณสามารถชี้ไปที่ตำแหน่งเฉพาะในไฟล์ใด ๆ ที่โหลดลงในเบราว์เซอร์หยุดการเรียกใช้โค้ด ณ จุดนั้นชั่วคราวและให้คุณโต้ตอบกับตัวแปรทั้งหมดที่มีจากจุดนั้น ที่เป็นจำนวนมาก! ฟังก์ชันดังกล่าวไม่ต้องการให้คุณเพิ่มโค้ดใด ๆ เลยทุกอย่างเกิดขึ้นในเครื่องมือ dev

ไม่เพียง แต่คุณจะสามารถเข้าถึงตัวแปรทั้งหมดได้คุณยังเห็น call stack, print stack trace และอื่น ๆ อีกมากมาย คุณสามารถกำหนดค่าให้ทำงานกับไฟล์ที่ย่อขนาดได้ อ่านเกี่ยวกับเรื่องนี้ ที่นี่ .

มีวิธีอื่นที่คุณสามารถเข้าถึงเวลาทำงานที่คล้ายกันได้เช่น โดยเพิ่ม Ng-init โทร. แต่จุดพักมีความซับซ้อนกว่า

AngularJS ยังช่วยให้คุณสามารถเข้าถึงขอบเขตผ่านองค์ประกอบ DOM (ตราบเท่าที่ ng-if ถูกเปิดใช้งาน) และฉีดบริการที่มีผ่านคอนโซล พิจารณาสิ่งต่อไปนี้ในคอนโซล:

ng-repeat

หรือชี้ไปที่องค์ประกอบในตัวตรวจสอบจากนั้น:

var ngInitDirective = ngDirective({ priority: 450, compile: function() { return { pre: function(scope, element, attrs) { scope.$eval(attrs.ngInit); } }; } });

แม้ว่าจะไม่ได้เปิดใช้งาน debugInfo คุณสามารถทำได้:

var ngShowDirective = ['$animate', function($animate) { return { restrict: 'A', multiElement: true, link: function(scope, element, attr) { scope.$watch(attr.ngShow, function ngShowWatchAction(value) { // we're adding a temporary, animation-specific class for ng-hide since this way // we can control when the element is actually displayed on screen without having // to have a global/greedy CSS selector that breaks when other animations are run. // Read: https://github.com/angular/angular.js/issues/9103#issuecomment-58335845 $animate[value ? 'removeClass' : 'addClass'](element, NG_HIDE_CLASS, { tempClasses: NG_HIDE_IN_PROGRESS_CLASS }); }); } }; }];

และพร้อมใช้งานหลังจากโหลดซ้ำ:

ในการฉีดและโต้ตอบกับบริการจากคอนโซลลอง:

$watch

B - ไทม์ไลน์ของ Chrome

เครื่องมือที่ยอดเยี่ยมอีกอย่างที่มาพร้อมกับเครื่องมือสำหรับนักพัฒนาคือไทม์ไลน์ ซึ่งจะช่วยให้คุณสามารถบันทึกและวิเคราะห์ประสิทธิภาพสดของแอปขณะที่คุณใช้งานได้ ผลลัพธ์จะแสดงการใช้หน่วยความจำอัตราเฟรมและการแยกกระบวนการต่างๆที่ใช้ CPU: การโหลดการเขียนสคริปต์การเรนเดอร์และการวาดภาพ

หากคุณพบว่าประสิทธิภาพของแอปของคุณลดลงคุณมักจะสามารถค้นหาสาเหตุดังกล่าวได้จากแท็บไทม์ไลน์ เพียงบันทึกการกระทำของคุณที่นำไปสู่ปัญหาด้านประสิทธิภาพและดูว่าเกิดอะไรขึ้น คนดูมากเกินไป? คุณจะเห็นแถบสีเหลืองกินพื้นที่มาก หน่วยความจำรั่ว? คุณสามารถดูจำนวนหน่วยความจำที่ใช้ไปในช่วงเวลาหนึ่งบนกราฟ

คำอธิบายโดยละเอียด: https://developer.chrome.com/devtools/docs/timeline

C - ตรวจสอบแอพจากระยะไกลบน iOS และ Android

วิธีขุดข้อมูลทวิตเตอร์

หากคุณกำลังพัฒนาแอปไฮบริดหรือเว็บแอปที่ตอบสนองคุณสามารถเข้าถึงคอนโซลของอุปกรณ์โครงสร้าง DOM และเครื่องมืออื่น ๆ ทั้งหมดที่มีให้ใช้งานผ่านเครื่องมือ Chrome หรือ Safari dev ซึ่งรวมถึง WebView และ UIWebView

ขั้นแรกเริ่มต้นเว็บเซิร์ฟเวอร์ของคุณบนโฮสต์ 0.0.0.0 เพื่อให้สามารถเข้าถึงได้จากเครือข่ายท้องถิ่นของคุณ เปิดใช้งานตัวตรวจสอบเว็บในการตั้งค่า จากนั้นเชื่อมต่ออุปกรณ์ของคุณเข้ากับเดสก์ท็อปและเข้าถึงหน้าการพัฒนาในพื้นที่โดยใช้ ip ของเครื่องแทน 'localhost' ปกติ เพียงเท่านี้อุปกรณ์ของคุณก็ควรพร้อมใช้งานจากเบราว์เซอร์บนเดสก์ท็อปของคุณ

ที่นี่ คือคำแนะนำโดยละเอียดสำหรับ Android และสำหรับ iOS คำแนะนำที่ไม่เป็นทางการสามารถพบได้ง่ายผ่านทาง Google

ฉันเพิ่งมีประสบการณ์ดีๆกับ browserSync . มันทำงานในลักษณะเดียวกับ livereload แต่จริงๆแล้วมันยังซิงค์เบราว์เซอร์ทั้งหมดที่ดูหน้าเดียวกันผ่าน browserSync ซึ่งรวมถึงการโต้ตอบของผู้ใช้เช่นการเลื่อนการคลิกปุ่ม ฯลฯ ฉันกำลังดูเอาต์พุตบันทึกของแอป iOS ในขณะที่ควบคุมเพจบน iPad จากเดสก์ท็อป มันทำงานได้ดี!

ข้อผิดพลาดทั่วไป # 18: ไม่อ่านซอร์สโค้ดในตัวอย่าง NG-INIT

// when in doubt, comment it out! :) จากเสียงของมันน่าจะคล้ายกับ

|_+_|
และ
|_+_|
ใช่ไหม? คุณเคยสงสัยไหมว่าทำไมมีความคิดเห็นในเอกสารว่าไม่ควรใช้? IMHO ที่น่าประหลาดใจ! ฉันคาดหวังว่าคำสั่งในการเริ่มต้นโมเดล นั่นคือสิ่งที่ทำเช่นกัน แต่…มีการใช้งานในลักษณะที่แตกต่างออกไปนั่นคือไม่ได้ดูค่าแอตทริบิวต์ คุณไม่จำเป็นต้องเรียกดูซอร์สโค้ด AngularJS - ให้ฉันนำมาให้คุณ:

|_+_|

น้อยกว่าที่คุณคาดหวัง? อ่านได้ค่อนข้างง่ายนอกจากไวยากรณ์คำสั่งที่น่าอึดอัดใจแล้วใช่หรือไม่ บรรทัดที่หกคือสิ่งที่เกี่ยวกับ

เปรียบเทียบกับ ng-show:

|_+_|

อีกครั้งบรรทัดที่หก มี

|_+_|
นั่นคือสิ่งที่ทำให้คำสั่งนี้เป็นแบบไดนามิก ในซอร์สโค้ด AngularJS ส่วนใหญ่ของโค้ดทั้งหมดคือความคิดเห็นที่อธิบายโค้ดที่ส่วนใหญ่อ่านได้ตั้งแต่เริ่มต้น ฉันเชื่อว่าเป็นวิธีที่ดีในการเรียนรู้เกี่ยวกับ AngularJS

สรุป

คู่มือนี้ครอบคลุมข้อผิดพลาด AngularJS ทั่วไปเกือบสองเท่าของคำแนะนำอื่น ๆ มันกลายเป็นอย่างนั้นตามธรรมชาติ ความต้องการวิศวกรส่วนหน้าของ JavaScript คุณภาพสูงนั้นสูงมาก AngularJS คือ ร้อนมากตอนนี้ และยังคงอยู่ในตำแหน่งที่มั่นคงในบรรดาเครื่องมือการพัฒนาที่ได้รับความนิยมมากที่สุดเป็นเวลาสองสามปี ด้วย AngularJS 2.0 ระหว่างทางมันอาจจะครองตำแหน่งไปอีกหลายปี

สิ่งที่ยอดเยี่ยมเกี่ยวกับการพัฒนาส่วนหน้าคือการให้รางวัลมาก งานของเราสามารถมองเห็นได้ทันทีและผู้คนโต้ตอบโดยตรงกับผลิตภัณฑ์ที่เราส่งมอบ เวลาที่ใช้ในการเรียนรู้ JavaScript และฉันเชื่อว่าเราควรให้ความสำคัญกับภาษา JavaScript เป็นการลงทุนที่ดีมาก มันเป็นภาษาของอินเทอร์เน็ต การแข่งขันแข็งแกร่งสุด ๆ ! เรามีจุดสนใจอย่างหนึ่งนั่นคือประสบการณ์ของผู้ใช้ จะประสบความสำเร็จเราต้องครอบคลุมทุกอย่าง

ซอร์สโค้ดที่ใช้ในตัวอย่างเหล่านี้สามารถดาวน์โหลดได้จาก GitHub . อย่าลังเลที่จะดาวน์โหลดและสร้างเป็นของคุณเอง

ฉันต้องการให้เครดิตกับนักพัฒนาสำนักพิมพ์สี่คนที่เป็นแรงบันดาลใจให้ฉันมากที่สุด:

ฉันอยากจะขอบคุณผู้คนที่ยอดเยี่ยมทุกคนในช่อง FreeNode #angularjs และ #javascript สำหรับการสนทนาที่ยอดเยี่ยมมากมายและการสนับสนุนอย่างต่อเนื่อง

และสุดท้ายจำไว้เสมอว่า:

|_+_|