No angularjs, você tem a tag ng-src, que tem como objetivo não receber um erro por um URL inválido antes que o angularjs avalie as variáveis colocadas entre {{
e }}
.
O problema é que eu uso alguns DIVs com um background-image
conjunto para um URL. Eu faço isso por causa da excelente propriedade CSS3, background-size
que corta a imagem no tamanho exato da DIV.
O único problema é que recebo muitos erros pelo mesmo motivo pelo qual eles criaram uma marca ng-src: tenho algumas variáveis no URL e o navegador acha que a imagem não existe.
Percebo que existe a possibilidade de escrever um bruto {{"style='background-image:url(myVariableUrl)'"}}
, mas isso parece "sujo".
Pesquisei bastante e não consigo encontrar o caminho certo para fazer isso. Meu aplicativo está se tornando uma bagunça por causa de todos esses erros.
Este funciona para mim
fonte
imgURL
não definido e tenta novamente quandoimgURL
é definido.A resposta acima não suporta interpolação observável (e me custou muito tempo tentando depurar). O link do jsFiddle no comentário do @BrandonTilley foi a resposta que funcionou para mim, que postarei novamente aqui para preservação:
Exemplo usando controlador e modelo
Controlador:
Predefinição:
Use no modelo assim:
ou assim:
fonte
Também é possível fazer algo assim com
ng-style
:que não tentaria buscar uma imagem inexistente.
fonte
Semelhante à resposta de hooblei, apenas com interpolação:
fonte
<span ng-style="{'background-image': 'url(/styles/images/profile.png)'}" style="background-image: url("");"></span>
. abordagem @hooblei funcionou.apenas uma questão de gosto, mas se você preferir acessar a variável ou função diretamente assim:
em vez de interpolar assim:
então você pode definir a diretiva de maneira um pouco diferente da
scope.$watch
que será feita$parse
no atributohá mais informações sobre isso aqui: AngularJS: Diferença entre os métodos $ observe e $ watch
fonte
@jaime sua resposta está bem. Mas se a sua página tiver o $ http.get, use ng-if
na fábrica
na área do controlador
e a visualização, se você usar o ng-if como abaixo, obterá a imagem por interpolação, caso contrário, não poderá obtê-la porque a diretiva obterá o valor antes da solicitação HTTP.
fonte
Descobri com 1,5 componentes que abstrair o estilo do DOM para funcionar melhor em minha situação assíncrona.
Exemplo:
E no controlador, algo assim:
fonte
Como você mencionou
ng-src
e parece que deseja que a página termine de renderizar antes de carregar sua imagem, você pode modificar a resposta do jaime para executar a diretiva nativa depois que o navegador terminar a renderização.Esta postagem no blog explica isso muito bem; essencialmente, inserir o
$timeout
invólucro parawindow.setTimeout
antes da função de retorno de chamada que você faz essas modificações para o CSS.fonte