• 样式选择器 ng-class/ng-style
    • ng-class
      • 动态化的样式输入
      • 结合两种模式的应用示例
      • CSS动画效果应用
    • ng-style

    样式选择器 ng-class/ng-style

    ng-class

    通过ng-class,我们可以对界面元素的css样式进行控制。下面,让我们通过示例来看看功能如何实现:

    此示例来源于官网的ngClass介绍界面,我进行了一些加工。

    首先,我们先创建一个style.css文件。

    1. /* 删除线 */
    2. .strike {
    3. text-decoration: line-through;
    4. }
    5. /* 粗体 */
    6. .bold {
    7. font-weight: bold;
    8. }
    9. /* 红色 */
    10. .red {
    11. color: red;
    12. }
    13. /* 错误 */
    14. .has-error {
    15. color: red;
    16. background-color: yellow;
    17. }
    18. /* 橙色 */
    19. .orange {
    20. color: orange;
    21. }

    修改FirstCtrl为如下代码:

    1. //app.js
    2. App.controller("FirstCtrl", function ($scope) {
    3. $scope.data = {
    4. deleted:false,
    5. important:false,
    6. error:false
    7. };
    8. });

    并在index.html<head>部分将css文件引入,并加入对应的代码。全部代码如下:

    1. <!DOCTYPE html>
    2. <html lang="zh" ng-app="App">
    3. <head>
    4. <meta charset="UTF-8">
    5. <title>{{"学习AngularJS 1.x"}}</title>
    6. <!-- 此处引入style.css样式文件-->
    7. <link type="text/css" rel="stylesheet" href="css/style.css">
    8. </head>
    9. <body>
    10. <div ng-controller="FirstCtrl">
    11. <!-- 此处放置了ng-class,并设定了每个样式激活时的条件(对应下方3个复选框)-->
    12. <p ng-class="{strike: data.deleted, bold: data.important, 'has-error': data.error}">示例文字</p>
    13. <input type="checkbox" ng-model="data.deleted">
    14. 选中后上方文字将加上删除线(style中加上strike类) <br>
    15. <input type="checkbox" ng-model="data.important">
    16. 选中后上方文字将变化为粗体(style中加上bold类) <br>
    17. <input type="checkbox" ng-model="data.error">
    18. 选中后上方文字将变红,背景变黄(style中加上has-error类)
    19. </div>
    20. <script type="text/javascript" src="components/angular/angular.js"></script>
    21. <script type="text/javascript" src="js/app.js"></script>
    22. </body>
    23. </html>

    运行效果:

    未选中时效果

    图4-11 ngClass运行效果

    选中第一个的效果

    图4-12 ngClass运行效果

    选中第二个的效果

    图4-13 ngClass运行效果

    选中第三个的效果

    图4-14 ngClass运行效果

    全部选中的效果

    图4-15 ngClass运行效果

    动态化的样式输入

    在上方的示例中,我们是针对提前设定好的样式进行是否生效的判断。除了这种使用方式,ng-class还支持直接传入字符串的方式进行样式调整。

    比如如下示例:

    1. App.controller("FirstCtrl", function ($scope) {
    2. $scope.data = {
    3. style: ""
    4. };
    5. });
    1. <div ng-controller="FirstCtrl">
    2. <p ng-class="data.style">直接使用字符串作为样式</p>
    3. <input type="text" ng-model="data.style">
    4. </div>

    运行效果

    图4-16 ngClass运行效果(使用文本作为样式)

    结合两种模式的应用示例

    这两种模式也可以结合使用,示例如下:

    1. <p ng-class="[data.style, {orange: warning}]">同时应用两种样式</p>

    此示例可举一反三,比如加入多个文本输入(对应多个来源),以及多个设定好的样式开关。

    此示例就不进行具体的运行效果展示了,请读者自行测试效果。

    CSS动画效果应用

    我们先在style.css中加入css的动画效果代码:

    1. .base-class {
    2. transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;
    3. }
    4. .base-class.animate {
    5. color: red;
    6. font-size:3em;
    7. }

    修改HTML代码如下:

    1. <div ng-controller="FirstCtrl">
    2. <input type="button" value="开始动画" ng-click="data.style='animate'">
    3. <br>
    4. <input type="button" value="恢复原始" ng-click="data.style=''">
    5. <br>
    6. <span class="base-class" ng-class="data.style">示例文本</span>
    7. </div>

    运行之后,点击上面的按钮,则文字放大变红。点击第二个按钮,则文本变回原来的样子。

    由于动画效果无法通过截图表示,还请读者自行测试。

    ng-style

    ng-style提供的功能比ng-class要少一些,只支持样式的传入。我们可以使用以下两种模式:

    1. <span ng-style="{'background-color':data.colorInput}">示例文本</span>
    2. //colorInput为$scope中的对象,传入文本即可
    3. <span ng-style="data.styleText">示例文本</span>
    4. //styleText为样式为 '{'color':red}'类型的文本

    通过样式传入,我们可以直接向元素传入对应的样式,实现样式动态化的效果。

    一个比较主要的用途是向元素传入动态的背景图片,例子如下(以下两个示例来自于StackOverflow):

    1. data-ng-style="{'background-image':'url(img/products/{{product.img}})'}"

    也可以传入一个函数(主要用于解决IE11中背景图片不显示的问题):

    1. <div ng-style="getBackgroundStyle(imagepath)"></div>
    2. <script type="text/javascript">
    3. //代码放置在ng-controller中
    4. $scope.getBackgroundStyle = function (imagepath) {
    5. return {
    6. 'background-image': 'url(' + imagepath + ')'
    7. }
    8. }
    9. </script>

    下面,我们通过官网的示例来看看如何传入文本:

    1. <input type="button" value="设置字体颜色为红色" ng-click="data.myStyle={color:'red'}">
    2. <input type="button" value="设置背景颜色" ng-click="data.myStyle={'background-color':'blue'}">
    3. <input type="button" value="清除样式" ng-click="data.myStyle={}">
    4. <br>
    5. <span ng-style="data.myStyle">示例文本</span>
    6. <pre>当前样式为{{data.myStyle}}</pre>

    运行效果为:

    图4-17 ng-style运行效果

    在下一节中,我们还将看到约束为只设置背景颜色的示例。