【问题标题】:ng-class does not change class unless I refresh the pageng-class 不会更改类,除非我刷新页面
【发布时间】:2016-10-14 01:46:05
【问题描述】:

我在视图中使用 ng-class 来更改和元素的类,它在页面加载时工作正常。这是我的代码:

<ul>
  <li ng-class="'{{account.currency}}' == '{{currency}}' ? 'active': 'inactive'" ng-repeat="account in accounts" bind="accounts">
    <a href="#/deposits/{{account.currency}}" ng-click="changeClass('{{account.currency}}', '{{currency}}')">
    {{currency}}
    </a>
  </li>
<ul>

如您所见,它从 URL 中获取第二种货币,并将其与另一种货币进行比较,以决定应将哪个类分配给我的 li 元素。

现在的问题是当有人点击链接并且 URL 改变时,分配的类并没有改变。知道如何让 ng-class 分配的类在

【问题讨论】:

    标签: javascript angularjs coffeescript


    【解决方案1】:

    你不需要为此调用函数,这可以很容易内联实现

    试试这样:

    <li ng-class="{'active' : account.currency == currency, 'inactive': 
    account.currency != currency}">
    

    <li ng-class="{true: 'active', false: 'inactive'}[account.currency == currency]">
    

    如果您使用的是 angular v.1.1.4+

    <li ng-class="account.currency == currency ? 'active': 'inactive'}">
    

    【讨论】:

    • 感谢您的提示。我已按照您的建议将我的代码内联。但问题依然存在。
    【解决方案2】:

    试试这个,

    var app = angular.module('app', []);
    
    app.controller('myctrl', function() {
      var vm = this;
      vm.accounts = [{
        currency: 'Doller'
      }, {
        currency: 'Pound'
      }, {
        currency: 'Euro'
      }];
      
      vm.changeClass = function(account) {
        vm.active = account.currency;  
      }
    });
    .active {
      background-color: green;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
    
    <body>
      <div ng-app="app" ng-controller="myctrl as ct">
        <ul>
          <li ng-class="{'active': ct.active === account.currency}" ng-repeat="account in ct.accounts">
            <a href="#" ng-click="ct.changeClass(account)">
              {{account.currency}}
            </a>
          </li>
        </ul>
      </div>
    
    </body>

    【讨论】:

    • 谢谢。我实际上未能修改它以使其与我现有的代码一起使用,因为我使用了自定义指令 - 我的代码如下所示:
    • 实际上它起作用了。我只是用范围替换了 vm 。非常感谢。愿风永远在你背后。
    【解决方案3】:

    制作ng-class= {'active': account.currency === currency}

    在 css 文件中,您应该有 .active{} 类。并让非活动类成为默认行为。

    P.S Dhaval 的答案也应该有效

    【讨论】:

    • 虽然这是另一种可行的方法,但并不能解决问题问题实际上是当我单击链接时,应该从旧的活动元素中删除“活动”类并分配给新的活动元素,这不会发生。当我点击链接时,有没有一种方法可以自动更改元素上的类?
    猜你喜欢
    • 2012-07-31
    • 1970-01-01
    • 2016-05-23
    • 2012-11-12
    • 1970-01-01
    • 1970-01-01
    • 2022-07-19
    • 1970-01-01
    • 2014-11-23
    相关资源
    最近更新 更多