AngularJS 1.2.1 - menambahkan kesalahan arahan secara dinamis kecuali jika tidak menggantikan elemen sumber

Saya telah memutakhirkan aplikasi saya ke AngularJS 1.2.1 dan mengalami masalah dengan kode yang berfungsi sebelumnya, yang tidak dapat saya selesaikan.

Saya memiliki halaman tempat pengguna membuat konten dari daftar konten yang telah ditentukan sebelumnya, yang masing-masing merupakan arahan AngularJS terpisah. Saya memiliki layanan yang menyimpan array item yang dikonfigurasi dan menghubungkannya ke perintah ng-repeat. Yang saya lakukan saat pengguna memilih untuk menambahkan item baru adalah memasukkannya ke dalam array dan menyerahkannya kepada Angular untuk memperbarui UI. HTML saya mirip dengan ini.

<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>

Semua arahan di sini mewarisi cakupan induk, dan sesederhana mungkin.

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

Ketika saya mengaturnya untuk menggantikan 'benar', saya mendapatkan kesalahan berikut di konsol setelah menambahkannya ke array dan item tidak ditampilkan:

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)

Baris 9101, yang ada dalam fungsi "consoleLog", jadi tampaknya gagal menulis sesuatu ke konsol, gagal, tetapi tetap berhasil menulis kesalahan di sana! Saya sudah mencoba men-debugnya dan tidak berhasil melakukannya.

Ketika saya mengaturnya untuk menggantikan 'false', itu berfungsi dengan baik. Saya ingin mereka mengganti elemen sumber jika tidak, pemformatannya akan sangat merepotkan karena elemen tambahan, dan dapat melakukannya sebelum peningkatan.

Adakah yang bisa memberikan saran di sini?


person jwest    schedule 22.11.2013    source sumber


Jawaban (2)


Saya telah menemukan bahwa jika Anda membungkus template html Anda dalam sebuah div maka itu akan berfungsi dengan baik. Atau jika Anda memiliki templat di direktif alih-alih menggunakan templateUrl.

person Tracy    schedule 10.03.2014

Saya tidak dapat menyelesaikan ini dengan kode saat ini, tetapi memindahkan beberapa HTML di arahan induk ke arahan anak menyelesaikan masalah. Saya tidak mengerti alasannya, namun masalah ini sudah teratasi.

person jwest    schedule 22.11.2013