AngularJS - ng-style does not update css background property AngularJS - ng-style does not update css background property angularjs angularjs

AngularJS - ng-style does not update css background property


I ran into this as well. Instead of evaluating with {{ }}, use string + value concatenation.

This will work:

<span ng-style="{'background':'transparent url(' + item.img + ')'}"></span>)

Here's a working version of your fiddle


It doesn't work because angular evaluate the content of single bracket only once and doesn't locate the variable you want to bind inside that string.

You could however create your own directive as such:

app.directive('backImg', function(){    return function(scope, element, attrs){        attrs.$observe('backImg', function(value) {            element.css({                'background': 'transparent url(' + value +')'            });        });    };});

and then use it in your template like this:

<div ng-if="vis" class="container" back-img="{{imgSrc}}"></div>

I have updated your fiddle and it seems to work fine http://jsfiddle.net/dS4pB/3/


Where you are currently updating your scope variable, wrap this within a $timeout call to push the updates to your scope and subsequently your view, this will effectively bump the update to the next digest avoiding the digest already in progress conflict:

    $timeout(function(){        $scope.var = value;    });

This question thread may give you some useful info regarding apply vs timeout etc