Невозможно прочитать свойство "$$ nextSibling" нулевого

Я продолжаю получать эту ошибку в своей программе, когда я уничтожаю свои собственные области. Я проследил его до этого цикла while в angular:

if (!(next = (current.$$childHead || (current !== target && current.$$nextSibling)))) {
    while(current !== target && !(next = current.$$nextSibling)) {
        current = current.$parent;
    }
}

Мне также удалось воспроизвести его в jsFiddle: http://jsfiddle.net/kEyqz/1/

Это довольно легко настроить, на элементе я подключаю событие click, а затем $broadcast, которое было нажато, за которым следует $apply.

В отдельной директиве (с дочерней областью) я слушаю это событие, и если я вижу это, я уничтожаю область содержимого. При этом возникает ошибка:

Uncaught TypeError: Cannot read property '$$nextSibling' of null 

Это лишь небольшой пример того, что я пытаюсь выполнить в своем коде.

Ведение журнала консоли прямо перед current = current. $parent приводит к тому, что область не имеет родительского элемента (она равна нулю).

Я могу добавить строки:

if(!current){
    break;
}

После current = current. $parent, но мне нужно будет его поддерживать, если я переключу версии angular (не идеально)

Ответы

Ответ 1

Это то, что вы искали http://jsfiddle.net/jw99Lj7t/?

Вы были $destroy в цикле $scope durgin digest, который вызывал ошибку.

Я не верю, что это bug, так как это так, как цикл digest реализован (он перебирает список $scopes, проверяя, что что-то изменилось, и мы не можем удалить области из этот список, поскольку он "уже используется" ).

Решение этой проблемы может привести к множеству сложностей, и поскольку digest должен быть очень быстрым, лучше просто найти другой способ для того, что вы делаете.