Невозможно прочитать свойство "$$ 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
должен быть очень быстрым, лучше просто найти другой способ для того, что вы делаете.