我正在处理一个自定义指令,用于在状态(使用ui-router
正在更改)时预加载图像,以便在导航到新状态之前解析数据和内容。自定义指令,用于预加载背景图像不工作AngularJS
我创建了一个笔在这里:https://codepen.io/wons88/pen/NgbNvO显示我与bgSrc
指令的基本实现:
app.directive('bgSrc', ['preloadService', function (preloadService) {
return function (scope, element, attrs) {
element.hide();
preloadService(attrs.bgSrc).then(function() {
console.log(element.css);
element.css({
"background-image": "url('" + attrs.bgSrc + "')"
});
element.fadeIn();
});
}
}]);
和preloadService
:
app.factory('preloadService', ['$q', '$rootScope', function ($q, $rootScope) {
return function (url) {
var deffered = $q.defer(),
image = new Image();
image.src = url;
if (image.complete) {
$rootScope.loading = false;
deffered.resolve();
} else {
$rootScope.loading = true;
image.addEventListener('load',
function() {
deffered.resolve();
$rootScope.loading = false;
});
image.addEventListener('error',
function() {
deffered.reject();
$rootScope.loading = true;
});
}
return deffered.promise;
};
}]);
和HTML:
<div bg-src="https://images5.alphacoders.com/446/thumb-1920-446028.jpg">Background img should show up...</div>
编辑: 问题是,即使加载图像也不会显示(如chrome开发工具中的网络选项卡所示)。如果我静态应用样式(或类),图像显示没有问题,只是加载速度较慢...因此试图应用该指令。
我知道在bgSrc
指令中发生了错误,但我无法找到它。对此事的任何帮助,将不胜感激:)
有什么实际问题? –
@MikeFeltman我意识到我没有说这个,会编辑我的帖子。该图像没有显示,但是可以在chrome开发工具的网络项目中加载和获取 – w0ns88
@sachilaranawaka no。我创建了我自己的指令,名为bgSrc(html中的bg-src) – w0ns88