Недавно у меня возникли некоторые проблемы с плагинами jQuery в директивах в Angular, которые не были правильно очищены и, следовательно, создавали утечки памяти.
Итак, сегодня, когда я работал над тестами, чтобы убедиться, что этого не произойдет, я понял, что остановить это невозможно.
var stopObserving = attrs.$observe('myProperty', function(newValue) {
updateElement(newValue);
});
Так как я думал, что он работает так же, как на $watch
, но это явно не так. Согласно документам, $observe
вернет функцию обратного вызова, что она, второй аргумент.
У меня есть этот тест:
describe('destroy',function(){
beforeEach(function(){
$scope.$destroy();
});
it('should have emptied the DOM node', function(){
expect(element.text()).toBe('');
});
it('shouldn\'t have any more watchers', function(){
dump(element.data().$scope.$$watchers);
expect(element.data().$scope.$$watchers.length).toBe(0);
});
});
И это не удается, потому что есть один наблюдатель. Я проверил и вызывается $destroy
, и, следовательно, очистка выполняется. Однако, как я могу избавиться от этого наблюдателя?
Код, если вам интересно,