Я сделал директиву, которая при щелчке создает диалоговое окно, которое добавляется к телу с помощью jQuery. Проблема в том, что при закрытии диалога области видимости никогда не очищаются должным образом. Как показано на рисунке ниже 167 ChildScopes сохраняются. Что соответствует количеству элементов в диалоговом окне, которое включает директиву ng-repeat.
Я попытался создать чрезвычайно простую версию сценария на Plnkr. К моему удивлению, области на самом деле удаляются на каждом близком расстоянии в Plnkr. Так что что-то, где-то в производстве, заставляет объекты оставаться в живых даже после того, как был вызван $destroy
.
link: ($scope, $element, $attr) ->
$element.on 'click', () ->
$scope.$apply () ->
child = $scope.$new()
template = """<span ng-controller="ListCtrl">...List dialog things...</span>"""
compiledTemplate = $compile(template)(child)
container = containers.createDialogContainer($element)
container.append(compiledTemplate)
#cleanup
$scope.closeWidget = () ->
container.trigger("container_close")
return
container.on "container_close", ()->
child.$apply () ->
child.$destroy()
return
Итак, вот мой вопрос:
Что может привести к тому, что область видимости останется в живых даже после того, как был вызван, вызван и запущен вызов $destroy?
По понятным причинам я не могу показать вам наш производственный код. Однако директива в Plnkr соответствует достаточному отладке.