AngularJS 1.2.1 - การเพิ่มข้อผิดพลาดคำสั่งแบบไดนามิก เว้นแต่ว่าจะไม่แทนที่องค์ประกอบต้นทาง

ฉันได้อัปเกรดแอปพลิเคชันเป็น AngularJS 1.2.1 แล้ว และกำลังประสบปัญหากับโค้ดที่ใช้งานได้ก่อนหน้านี้ ซึ่งฉันไม่สามารถแก้ไขได้

ฉันมีหน้าเว็บที่ผู้ใช้สร้างเนื้อหาจากรายการเนื้อหาที่กำหนดไว้ล่วงหน้า ซึ่งแต่ละรายการมีคำสั่ง AngularJS แยกต่างหาก ฉันมีบริการที่เก็บอาร์เรย์ของรายการที่กำหนดค่าไว้และเชื่อมโยงกับคำสั่ง ng-repeat ทั้งหมดที่ฉันทำเมื่อผู้ใช้เลือกที่จะเพิ่มรายการใหม่คือผลักมันลงบนอาเรย์และปล่อยให้เป็นหน้าที่ของ Angular เพื่ออัปเดต UI HTML ของฉันคล้ายกับสิ่งนี้

<div data-ng-repeat="item in configuration">
    <directive-a data-ng-if="item.obj === 'directive-a'></directive-a>
    <directive-b data-ng-if="item.obj === 'directive-b'></directive-b>
    <directive-c data-ng-if="item.obj === 'directive-c'></directive-c>
    <directive-d data-ng-if="item.obj === 'directive-d'></directive-d>
</div>

คำสั่งทั้งหมดที่นี่สืบทอดขอบเขตระดับบนสุด และมีความเรียบง่ายเหมือนกับที่มา

angular.module("App").directive("directiveA", function () {
    return {
        restrict: "E",
        replace: true,
        templateUrl: "partials/DriectiveA.html"
    };
});

เมื่อฉันตั้งค่าให้แทนที่ 'true' ฉันได้รับข้อผิดพลาดต่อไปนี้ในคอนโซลเมื่อเพิ่มลงในอาร์เรย์และรายการไม่แสดงผล:

TypeError: undefined is not a function
    at ngRepeatAction (file:///C:/TeamFoundation/PRE/js/libs/angular-1.2.1.js:18826:15)
    at Object.$watchCollectionAction [as fn] (file:///C:/TeamFoundation/PRE/js/libs/angular-1.2.1.js:11347:11)
    at Scope.$digest (file:///C:/TeamFoundation/PRE/js/libs/angular-1.2.1.js:11443:27)
    at Scope.$apply (file:///C:/TeamFoundation/PRE/js/libs/angular-1.2.1.js:11682:24)
    at HTMLDivElement.<anonymous> (file:///C:/TeamFoundation/PRE/js/libs/angular-1.2.1.js:17531:21)
    at HTMLDivElement.jQuery.event.dispatch (file:///C:/TeamFoundation/PRE/js/libs/jQuery-1.8.2.js:3063:34)
    at HTMLDivElement.elemData.handle.eventHandle (file:///C:/TeamFoundation/PRE/js/libs/jQuery-1.8.2.js:2681:47)

บรรทัด 9101 ซึ่งอยู่ในฟังก์ชัน "consoleLog" ดังนั้นจึงดูเหมือนว่าจะล้มเหลวในการเขียนบางสิ่งลงในคอนโซล ล้มเหลว แต่การจัดการเพื่อเขียนข้อผิดพลาดที่นั่นอยู่ดี! ฉันได้ลองแก้ไขข้อบกพร่องแล้ว แต่ไม่สามารถจัดการได้จริง

เมื่อฉันตั้งค่าให้แทนที่ 'false' มันก็ใช้ได้ดี ฉันต้องการให้พวกเขาแทนที่องค์ประกอบต้นทาง ไม่เช่นนั้นการจัดรูปแบบจะสร้างความเจ็บปวดอย่างมากเนื่องจากมีองค์ประกอบพิเศษ และสามารถทำได้ก่อนการอัปเกรด

ใครสามารถให้คำแนะนำใด ๆ ที่นี่?


person jwest    schedule 22.11.2013    source แหล่งที่มา


คำตอบ (2)


ฉันพบว่าหากคุณรวมเทมเพลต html ของคุณไว้ใน div มันจะทำงานได้ดี หรือถ้าคุณมีเทมเพลตในคำสั่งแทนที่จะใช้ templateUrl

person Tracy    schedule 10.03.2014

ฉันไม่สามารถแก้ไขปัญหานี้ด้วยโค้ดปัจจุบันได้ แต่การย้าย HTML บางส่วนในพาเรนต์ไปยังคำสั่งย่อยช่วยแก้ปัญหาได้ ฉันไม่เข้าใจว่าทำไม แต่มันก็แก้ไขได้

person jwest    schedule 22.11.2013