为啥我们在 AngularJS 中使用 ng-style 而不是 style 进行 css 格式化?

Posted

技术标签:

【中文标题】为啥我们在 AngularJS 中使用 ng-style 而不是 style 进行 css 格式化?【英文标题】:Why do we use ng-style instead of style in AngularJS for css formatting?为什么我们在 AngularJS 中使用 ng-style 而不是 style 进行 css 格式化? 【发布时间】:2017-10-24 17:27:57 【问题描述】:

过去几天我开始使用 AngularJS。

我只是想知道为什么我们使用ng-style 标签来为静态和动态网页中的组件设置样式时使用style。我希望我能找到我们使用 ng-style 的解决方案,特别是在 AngularJS 中进行样式设置。

【问题讨论】:

【参考方案1】:

根据@Mistalis 回答ng-style 绑定一个表达式。

例如..如果我们想动态设置宽度或高度,在这种地方我们可以选择ng-style

What is the difference between ng-class and ng-style?

var app = angular.module('exApp', []);
app.controller('ctrl', function($scope) 
    $scope.sty = 40;
);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script>
<div ng-app="exApp" ng-controller="ctrl">
  <button ng-click="sty=sty+10">Click Me +</button>
  <button ng-click="sty=sty-10">Click Me -</button>
  <br/> <br/>
  <div ng-style="background:'#789',height:sty + 'px', width:sty + 'px'">See Now</div>
  <br>
  <p>Size: sty</p>
</div>

【讨论】:

【参考方案2】:

根据定义:

style 是一个 html attribute。 ng-style 是一个 AngularJS directive

说明:

不同之处在于style,允许您直接通过元素的本机属性设置元素的样式,但如果您想,例如,做一些更动态的事情,例如在一定条件下改变风格。您需要使用 javascript 来执行此操作。在 AngularJS 的上下文中,这就是 ng-style 的用武之地。

ng-style 将允许您使用 Angular JavaScript 根据您在任何特定时间的需要更改或设置元素的样式。

示例:

这是一个fiddle 演示两者的用法(或见下文)

在您的标记中。

<div style="background: red"> this is set using the style property</div>

<div ng-style="getStyle('111111')"> set using ng-style</div> 

在您的角度控制器中。

getStyle = function(colour) 
    return "background": "#" + colour;

在上面的例子中,getStyle 是一个函数,它允许你传入一个颜色值,ng-style 指令依次将绑定到 DOM 元素。当然,这可以根据您需要做的事情变得动态或灵活。 (例如,在单击按钮、悬停事件等时改变颜色)

【讨论】:

【参考方案3】:

styleng-style 的区别在于,ng-style 绑定了一个表达式

这意味着它将表达式评估为 Angular 代码。例如:

span 
  color: black;
 <script src="//code.angularjs.org/snapshot/angular.min.js"></script>

<div ng-app="">
  <button ng-click="myStyle=color:'red'">Set color</button>
  <button ng-click="myStyle='background-color':'blue'">Set background</button>
  <br/>
  <span ng-style="myStyle">Set my style with ngStyle!</span>
  <pre>myStyle=myStyle</pre>
</div>

ng-style="myStyle" 将在您的控制器中查找$scope.myStyle,并将其内容绑定到样式。

【讨论】:

以上是关于为啥我们在 AngularJS 中使用 ng-style 而不是 style 进行 css 格式化?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Zone.js 会改变 AngularJS 评估属性的方式?

为啥我应该在 AngularJS 中使用隔离范围指令?

AngularJS:为啥在说“服务”时使用“工厂”?

为啥 AngularJS 文档不在模型指令中使用点?

为啥我应该在 AngularJS 中选择使用服务而不是工厂? [复制]

为啥 AngularJS 指令中不推荐使用 `replace` 属性? [复制]