AngularJS 1.2.1 - динамическое добавление ошибок директив, если они не заменяют исходный элемент

Я обновил свое приложение до AngularJS 1.2.1 и столкнулся с проблемой с ранее работающим кодом, которую не могу решить.

У меня есть страница, на которой пользователь создает контент из заранее определенного списка контента, каждый из которых является отдельной директивой AngularJS. У меня есть служба, которая хранит массив настроенных элементов и связана с командой ng-repeat. Все, что я делаю, когда пользователь решает добавить новый элемент, — это помещаю его в массив и оставляю на усмотрение Angular для обновления пользовательского интерфейса. Мой 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