ลำดับลิงก์โพสต์คำสั่งเชิงมุมไม่ถูกต้อง (1.3)

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

<message-container> <------ The template for this directive contains the directive <scrollable-content> </message-container>

เนื้อหาแบบเลื่อนได้

return { restrict: 'E', templateUrl: 'core/app/partials/common/scrollable.html', transclude: true, replace: true, scope: true, link: function ($scope, $element, $attrs) {....

คอนเทนเนอร์ข้อความ

return { restrict: 'E', replace: true, scope: true, templateUrl: 'core/app/partials/chat/message-container.html', link: function ($scope, $element) {....

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

ความช่วยเหลือใด ๆ ที่ชื่นชม!

อัปเดต: เทมเพลตของเราถูกแคชไว้ล่วงหน้า


person Shepless    schedule 17.10.2014    source แหล่งที่มา
comment
คุณใช้ element.bind ในคำสั่งระดับบนสุดเพื่อผูกเหตุการณ์เหล่านั้นหรือไม่   -  person Guillermo    schedule 18.10.2014
comment
เราเป็น. มันทำให้เรานิ่งงันจริงๆ   -  person Shepless    schedule 18.10.2014


คำตอบ (1)


ไม่กี่เดือนที่ผ่านมา ฉันเจาะลึกเรื่องนี้ ดูเหมือนว่าจะผิด แต่จริงๆ แล้วมีเหตุผลอยู่เบื้องหลังเรื่องนี้ templateUrl ดาวน์โหลดเทมเพลตอะซิงก์ และทริกเกอร์การคอมไพล์สำหรับโหนดเหล่านั้นหลังจากที่เทมเพลตกลับมา วิธีนี้จะใช้งานได้หากคุณใช้เทมเพลตที่แคชไว้ "การโหลด" ของ tempateURL จะดำเนินการหลังจากรอบการแยกย่อยปัจจุบันพร้อมแล้ว แน่นอนแม้ว่าเทมเพลตจะอยู่ใน $tempateCache แล้ว แต่ก็มีการสนทนาเกี่ยวกับเรื่องนี้และ เอกสารได้รับการดัดแปลงเพื่อเน้นย้ำถึงพฤติกรรมนี้

หากคุณต้องการคำสั่งซื้อจริงๆ ให้ใช้เทมเพลตแบบคงที่ หรือใช้เคล็ดลับเช่นนี้:

 template: $templateCache.get('myTemplate.html'),

หยาบคุณต้องโหลดเทมเพลตของคุณล่วงหน้าเพื่อให้ใช้งานได้!

person Sander Elias    schedule 18.10.2014
comment
ขออภัย ฉันควรจะบอกว่าเทมเพลตของเราถูกแคชไว้ล่วงหน้า ดังนั้นจึงไม่มีคำขอแบบอะซิงก์ - person Shepless; 18.10.2014
comment
นั่นไม่ได้สร้างความแตกต่างในสถานการณ์นี้ ข้อดีคือคุณสามารถใช้เคล็ดลับที่ฉันแสดงให้คุณดูได้โดยไม่ต้องดัดแปลงอีกต่อไป - person Sander Elias; 18.10.2014
comment
ฉันเห็น. ฉันจะลองดูและรายงานกลับ ขอบคุณ. - person Shepless; 19.10.2014
comment
นี้ได้แก้ไขปัญหาแล้ว ขอบคุณมากสำหรับความช่วยเหลือของคุณ! - person Shepless; 19.10.2014