在Angular JS中动态应用CSS样式属性

jon*_*bbs 112 javascript angularjs ng-style

这应该是一个简单的问题,但我似乎无法找到解决方案.

我有以下标记:

<div style="width:20px; height:20px; margin-top:10px; border:solid 1px black; background-color:#ff0000;"></div>
Run Code Online (Sandbox Code Playgroud)

我需要将背景颜色绑定到范围,所以我尝试了这个:

<div style="{width:20px; height:20px; margin-top:10px; border:solid 1px black; background-color:{{data.backgroundCol}};}"></div>
Run Code Online (Sandbox Code Playgroud)

这不起作用,所以我做了一些研究并发现ng-style,但是这没有用,所以我尝试将动态部分拿出来,只是对样式进行硬编码ng-style,就像这样......

<div ng-style="{width:20px; height:20px; margin-top:10px; border:solid 1px black; background-color:#ff0000;}"></div>
Run Code Online (Sandbox Code Playgroud)

这甚至都不起作用.我误解了怎么ng-style运作?有没有办法放入{{data.backgroundCol}}普通的样式属性并让它插入值?

Sta*_*Sky 188

ngStyle 指令允许您动态地在HTML元素上设置 CSS样式.

对于其键是CSS样式名称和值的对象的表达是这些CSS键的对应值.由于某些CSS样式名称不是对象的有效键,因此必须引用它们.

ng-style="{color: myColor}"

您的代码将是:

<div ng-style="{'width':'20px', 'height':'20px', 'margin-top':'10px', 'border':'solid 1px black', 'background-color':'#ff0000'}"></div>
Run Code Online (Sandbox Code Playgroud)

如果要使用范围变量:

<div ng-style="{'background-color': data.backgroundCol}"></div>
Run Code Online (Sandbox Code Playgroud)

这里有一个关于小提琴使用的示例ngStyle,以及在运行代码段的代码下方:

angular.module('myApp', [])
.controller('MyCtrl', function($scope) {
  $scope.items = [{
      name: 'Misko',
      title: 'Angular creator'
    }, {
      name: 'Igor',
      title: 'Meetup master'
    }, {
      name: 'Vojta',
      title: 'All-around superhero'
    }

  ];
});
Run Code Online (Sandbox Code Playgroud)
.pending-delete {
  background-color: pink
}
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="myApp" ng-controller='MyCtrl' ng-style="{color: myColor}">

  <input type="text" ng-model="myColor" placeholder="enter a color name">

  <div ng-repeat="item in items" ng-class="{'pending-delete': item.checked}">
    name: {{item.name}}, {{item.title}}
    <input type="checkbox" ng-model="item.checked" />
    <span ng-show="item.checked"/><span>(will be deleted)</span>
  </div>
  <p>
    <div ng-hide="myColor== 'red'">I will hide if the color is set to 'red'.</div>
</div>
Run Code Online (Sandbox Code Playgroud)


小智 25

最简单的方法是为样式调用函数,并使函数返回正确的样式.

<div style="{{functionThatReturnsStyle()}}"></div>
Run Code Online (Sandbox Code Playgroud)

在你的控制器中:

$scope.functionThatReturnsStyle = function() {
  var style1 = "width: 300px";
  var style2 = "width: 200px";
  if(condition1)
     return style1;
  if(condition2)
     return style2;
}
Run Code Online (Sandbox Code Playgroud)

  • 我也不推荐这个,这只适用于像Chrome这样的少数浏览器,但如果你看看IE 9+,这将无法正常工作 (7认同)
  • 我不建议,angular就是在视图中保留样式细节 (3认同)

jak*_*kee 18

直接来自ngStyle docs:

对于其键是CSS样式名称和值的对象的表达是这些CSS键的对应值.

<div ng-style="{'width': '20px', 'height': '20px', ...}"></div>
Run Code Online (Sandbox Code Playgroud)

所以你可以这样做:

<div ng-style="{'background-color': data.backgroundCol}"></div>
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!

  • 是的,我在文档中看到了这一点,但我看不出如何将其转换为多个规则,现在我可以看到它不是正常的css语法而是对象语法. (4认同)

小智 14

在一般说明中,您可以使用ng-if和ng-style的组合将条件更改与背景图像中的更改相结合.

<span ng-if="selectedItem==item.id"
      ng-style="{'background-image':'url(../images/'+'{{item.id}}'+'_active.png)',
                'background-size':'52px 57px',
                'padding-top':'70px',
                'background-repeat':'no-repeat',
                'background-position': 'center'}">
 </span>
 <span ng-if="selectedItem!=item.id"
       ng-style="{'background-image':'url(../images/'+'{{item.id}}'+'_deactivated.png)',
                'background-size':'52px 57px',
                'padding-top':'70px',
                'background-repeat':'no-repeat',
                'background-position': 'center'}">
 </span>
Run Code Online (Sandbox Code Playgroud)