я следующая директива, которая говорит мне, или не загружен образом я пытаюсь использовать успешно или нет:
return {
restrict: 'A',
scope: {
imageLoad: '@'
},
link: function(scope, element, attrs) {
attrs.$observe('imageLoad', function (url) {
var deferred = $q.defer(),
image = new Image();
image.onerror = function() {
deferred.resolve(false);
};
image.onload = function() {
deferred.resolve(true);
};
image.src = url;
return deferred.promise;
});
}
};
Все я затем нужно сделать, это два простых тестов, которые проверяют image.onerror
и image.onload
, но я, кажется, только попасть в на функцию ошибок, вот что я до сих пор:
compileDirective = function() {
var element = angular.element('<div data-image-load="http://placehold.it/350x150"></div>');
$compile(element)(scope);
$rootScope.$digest();
return element;
};
beforeEach(inject(function (_$compile_, _$rootScope_) {
$compile = _$compile_;
$rootScope = _$rootScope_;
scope = $rootScope.$new();
}));
it('should do something', function() {
var compiledElement, isolatedScope;
compiledElement = compileDirective();
isolatedScope = compiledElement.isolateScope();
expect(true).toBe(true);
});
, очевидно, этот тест проходит, как он просто ожидает, что верно будет правда, однако с точки зрения охвата это попадает в t он работает onerror, поэтому мне почему-то нужно проверить, что отложенный.прогноз должен возвращать false.
так в конечном счете две части вопроса, как я получаю результат deferred.resolve?
и, во-вторых, как мне попасть в функцию onload?
я имел взгляд вокруг и видел некоторые предложения, добавив следующее:
element[0].setAttribute('imageLoad','http://placehold.it/350x150');
$compile(element)(scope);
element.trigger('imageLoad');
и оставляя data-image-load=""
пустым, но не казалось, везения, любые предложения было бы здорово.
Это не связано с вашим вопросом, а есть ли особая причина, вы используете 'AttrS $ observe'.? Прямо сейчас вы можете просто удалить это и заменить 'url'' scope.imageLoad'. Прямо сейчас анонимная функция, переданная в '$ observ', просто возвращает обещание, но никто не сможет посмотреть на результат. В чем смысл этой директивы? Как он должен использоваться? – tasseKATT
@tasseKATT в основном путь изображения в реальном приложении будет динамичным и в результате может измениться, поэтому его необходимо повторно запустить. обещание гарантирует, что он загружен, если он не сработает, я бы служил резервным изображением, я пропустил какой-то код из приведенного выше примера, где я установил резервное изображение, используя element.css (background image) – gardni
Так что сама директива единственный реагирует на результат обещания? – tasseKATT