Управление встроенным стилем с помощью angular не работает в IE

Я хотел установить положение div на основе возвращаемого значения функции в угловом контроллере

следующее отлично работает в FireFox и chrome, но в Internet explorer {{position($index)}}% интерпретируется как литеральное строковое значение и поэтому не имеет эффекта

<div ng-repeat="item in items" style="left:{{position($index)}}%"></div>

вот пример вопроса:

var app = angular.module('app', []);

app.controller('controller', function($scope) {

    $scope.items=[1,2,3,4,5,6,7,8,9,10];

    $scope.position=function(i){
        var percent =[5,10,15,20,25,30,35,40,45,50,55,60,65,70];
        return percent[i+1];
    }
});

и вот это Скрипка демонстрация

есть ли у кого-нибудь предложения о том, как исправить?

3 ответов


вы должны использовать ng-style вместо стиля, в противном случае некоторые браузеры, такие как IE удалит недопустимые значения атрибутов стиля (наличие {{}} etc делает его недействительным), прежде чем даже угловой имеет шанс отобразить его. Когда вы используете ng-style angular вычислит выражение и добавит к нему встроенные атрибуты стиля.

<div ng-repeat="item in items" ng-style="{left: position($index) + '%'}"></div>

поскольку вы в любом случае вычисляете позицию, вы также можете добавить % С position и отправить его. Также помните, что вызов функции в ng-repeat вызовет функцию каждый цикл дайджеста, поэтому вы можете быть осторожны, чтобы не делать слишком много интенсивных операций внутри метода.

 <div ng-repeat="item in items" ng-style="{left: position($index)}">{{item}}</div>

и возврат

  return percent[i+1] + "%";

демо


если вы хотите использовать выражение угловой привязки {{}} так же, как обычный атрибут стиля, как style="width:{{someScopeVar}}", использовать ng-attr-style и он будет отлично работать IE (и, очевидно, другие умнее):)

проверить jsFiddle ... Проверено с угловым JS 1.4.8

здесь я показал использование style, ng-style и ng-attr-style

HTML-КОД

<div ng-app="app">
    <div ng-controller="controller">

        <div style="background:{{bgColor}}">
            This will NOT get colored in IE
        </div>

        <div ng-attr-style="background:{{bgColor}}">
            But this WILL get colored in IE
        </div>

        <div ng-style="styleObject">
            And so is this... as this uses a json object and gives that to ng-style
        </div>

    </div>
</div>

JS

var app = angular.module('app', []);

app.controller('controller', function($scope) {

    $scope.bgColor = "yellow";        
    $scope.styleObject = {"background": "yellow"};
});

Да ng-style будет работать, чтобы решить эту проблему. Вы можете использовать условный стиль, используя ternary operator.

HTML-код:

<div ng-style="{'display':showInfo?'block':'none'}">
</div>