【问题标题】:AngularJS - updating ng-class name dynamicallyAngularJS - 动态更新 ng-class 名称
【发布时间】:2016-03-11 13:23:01
【问题描述】:

在 AngularJS 中使用 animate.css。我正在尝试在 ng-click 上将一个类应用于元素,但该元素没有得到更新。我正在尝试多种方法(使用函数等更新范围值),但没有任何乐趣。基本上,我想在单击按钮 1 或按钮 2 时相应地向动画元素添加 'fadeIn'、'fadeOut' 和 'flipIn'、'flipOut'。

<button ng-click="animate = !animate; classIn = 'fadeIn'; classOut = 'fadeOut'" class="btn btn-default">Fade</button>

<button ng-click="animate = !animate; classIn = 'flipIn'; classOut = 'flipOut'" class="btn btn-default">Flip</button>

<div class="animated-wrapper">
  <h1 class="text-center animated" ng-class="{'{{classIn}}': animate, '{{classOut}}': !animate}">Animation</h1>
</div>

谢谢

编辑: 在玩了一点代码之后,我想出了一个解决方案(修改一点@hadiJZ 答案):

<button ng-click="setAnimateClass(animate = !animate, 'fadeIn', 'fadeOut')" class="btn btn-default">Fade</button>

<button ng-click="setAnimateClass(animate = !animate, 'bounceIn', 'bounceOut')" class="btn btn-default">Bounce</button>

<div class="animated-wrapper">
    <h1 class="text-center animated" ng-class="animateClass">Animation</h1>
</div>

在控制器中:

$scope.animate = true;

$scope.setAnimateClass = function (animate, classIn, classOut) {
  if (animate) {
    $scope.animateClass = classIn;
  } else {
    $scope.animateClass = classOut;
  }
};

【问题讨论】:

  • 试试这个 ng-class="{'classIn': animate, 'classOut': !animate}"

标签: html css angularjs animate.css


【解决方案1】:

您必须将类名放在单引号中。 我举个简单的例子。

var myapp = angular.module('myapp', []);
myapp.controller('Ctrl', function ($scope) {
  var vm = this;
  vm.animate = true;
  vm.cssVal = "";
  
  vm.addFadeClass = function(animate){
    if(animate)
      vm.cssVal = "fadeIn";
    else
       vm.cssVal = "fadeOut";
    
    }
  vm.addFlipClass = function(animate){
    if(animate)
      vm.cssVal = "flipIn";
    else
       vm.cssVal = "flipOut";
    
    }
  
  
});
.fadeIn{
  color: red;
  }

.fadeOut{
  color:blue;
  }
.flipIn{
  font-size:20px;
  }

.flipOut{
  font-size:40px;
  }
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

<div ng-app="myapp" ng-controller="Ctrl as vm">
 <button ng-click="vm.addFadeClass((animate = !animate))" class="btn btn-default">Fade</button>
<button ng-click="vm.addFlipClass((animate = !animate))" class="btn btn-default">Flip</button>


<div class="animated-wrapper">
  <h1 class="text-center animated" ng-class="vm.cssVal" >Animation</h1>
</div>
  
</div>

【讨论】:

  • 这将产生&lt;h1 class="text-center animated classIn"...,但我需要&lt;h1 class="text-center animated fadeIn"...
【解决方案2】:

你有多余的双花括号,改为:

<h1 class="text-center animated" ng-class="{'classIn': animate, 'classOut': !animate}">Animation</h1>

【讨论】:

  • 这将产生&lt;h1 class="text-center animated classIn"...,但我需要&lt;h1 class="text-center animated fadeIn"...
  • @user3925672 然后改变你的逻辑,我只是​​向你展示了为什么你的 ng-class 失败了。更改条件。
  • 对不起,我没有关注。在检查了我的示例的 DOM(带有多余的卷曲)后,我得到:&lt;h1 class="text-center animated" ng-class="{'fadeIn': animate, 'fadeOut': !animate}"&gt;Animation&lt;/h1&gt;(对于按钮 1),删除卷曲后我得到 &lt;h1 class="text-center animated classIn" ng-class="{'classIn': animate, 'classOut': !animate}"&gt;Animation&lt;/h1&gt; - 这很好,但是我想得到 &lt;h1 class="text-center animated fadeIn" ng-class="{'fadeIn': animate, 'fadeOut': !animate}"&gt;Animation&lt;/h1&gt; 不知道条件如何应该改变..
【解决方案3】:

Angular 也可以将数组作为类:https://docs.angularjs.org/api/ng/directive/ngClass

所以你可以用你的控制器构建你的数组并将它绑定到 ngClass

ng-class="classArray"

$scope.classArray = [...]

【讨论】:

    【解决方案4】:

    试试这个:

    <h1 class="text-center animated" 
        ng-class="{classIn: animate, classOut: !animate}">Animation</h1>
    

    【讨论】:

    • 这将产生&lt;h1 class="text-center animated classIn"...,但我需要&lt;h1 class="text-center animated fadeIn"...
    猜你喜欢
    • 1970-01-01
    • 2014-04-24
    • 2019-03-24
    • 2015-02-15
    • 1970-01-01
    • 1970-01-01
    • 2016-09-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多