อ่านสิ่งนี้เฉพาะเมื่อคุณกำหนดคำแนะนำเครื่องมือแบบไดนามิก
กล่าวคือ <div tooltip={{ obj.somePropertyThatMayChange }} ...></div>
ฉันมีปัญหาเกี่ยวกับคำแนะนำเครื่องมือแบบไดนามิกที่ไม่ได้อัปเดตด้วยมุมมองเสมอไป ตัวอย่างเช่นฉันกำลังทำสิ่งนี้:
สิ่งนี้ไม่ได้ผลอย่างสม่ำเสมอ
<div ng-repeat="person in people">
<span data-toggle="tooltip" data-placement="top" title="{{ person.tooltip }}">
{{ person.name }}
</span>
</div>
และเปิดใช้งานดังนี้:
$timeout(function() {
$(document).tooltip({ selector: '[data-toggle="tooltip"]'});
}, 1500)
อย่างไรก็ตามเนื่องจากอาร์เรย์คนของฉันจะเปลี่ยนคำแนะนำเครื่องมือของฉันจึงไม่อัปเดตเสมอไป ฉันพยายามแก้ไขทุกอย่างในหัวข้อนี้และอื่น ๆ โดยไม่มีโชค ความผิดพลาดดูเหมือนจะเกิดขึ้นประมาณ 5% ของเวลาเท่านั้นและแทบจะเป็นไปไม่ได้เลยที่จะทำซ้ำ
น่าเสียดายที่คำแนะนำเครื่องมือเหล่านี้เป็นภารกิจที่สำคัญสำหรับโครงการของฉันและการแสดงคำแนะนำเครื่องมือที่ไม่ถูกต้องอาจเป็นผลเสียมาก
สิ่งที่ดูเหมือนจะเป็นปัญหา
Bootstrap กำลังคัดลอกค่าของtitle
คุณสมบัติไปยังแอตทริบิวต์ใหม่data-original-title
และลบtitle
คุณสมบัติ (บางครั้ง) เมื่อฉันเปิดใช้งานคำแนะนำ อย่างไรก็ตามเมื่อฉันtitle={{ person.tooltip }}
จะเปลี่ยนค่าใหม่จะไม่ได้รับการอัปเดตในคุณสมบัติdata-original-title
เสมอไป ฉันพยายามปิดการใช้งานคำแนะนำเครื่องมือและเปิดใช้งานอีกครั้งทำลายพวกเขาผูกพันกับคุณสมบัตินี้โดยตรง ... อย่างไรก็ตามสิ่งเหล่านี้ไม่ได้ผลหรือสร้างปัญหาใหม่ เช่นแอตทริบิวต์title
และdata-original-title
ทั้งที่ถูกลบออกและยกเลิกการผูกมัดจากวัตถุของฉัน
ทำงานอะไร
บางทีรหัสที่น่าเกลียดที่สุดที่ฉันเคยผลักดัน แต่มันช่วยแก้ปัญหาเล็ก ๆ น้อย ๆ นี้ให้กับฉันได้ ฉันเรียกใช้รหัสนี้ทุกครั้งที่คำแนะนำเครื่องมืออัปเดตด้วยข้อมูลใหม่:
$timeout(function() {
$('[data-toggle="tooltip"]').each(function(index) {
if ($(this).attr("title").length > 0) {
$( this ).attr("data-original-title", $(this).attr("title"));
}
});
$timeout(function() {
$(document).tooltip({ selector: '[data-toggle="tooltip"]'});
}, 500);
}, 1500);
สิ่งที่เกิดขึ้นที่นี่ในสาระสำคัญคือ:
- รอสักครู่ (1500 ms) เพื่อให้วงจรการย่อยเสร็จสมบูรณ์และ
title
จะอัปเดต s
- หากมี
title
คุณสมบัติที่ไม่ว่างเปล่า (กล่าวคือมีการเปลี่ยนแปลง) ให้คัดลอกไปยังdata-original-title
คุณสมบัตินั้นจึงจะถูกหยิบขึ้นมาโดย Toolips ของ Bootstrap
- เปิดใช้งานคำแนะนำเครื่องมืออีกครั้ง
หวังว่าคำตอบยาว ๆ นี้จะช่วยให้ใครบางคนที่อาจกำลังลำบากเหมือนฉัน