2017-11-10 11 views
0

クリックに基づいてアクティブなクラスの長さを取得しようとしています。私はタイムアウトを使用している場合は、正確なカウントを取得しています。正確なアクティブなクラスの長さを取得するためにタイムアウトを使用せずにどのように達成できますか?タイムアウトのないアクティブなクラスの長さを取得できません

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<!DOCTYPE html> 
 
<html> 
 
<head> 
 
\t <title></title> 
 
\t 
 
\t <style> 
 
\t \t a { 
 
\t \t \t text-decoration:none; 
 
\t \t } 
 
\t \t .active { 
 
\t \t \t color:orange; 
 
\t \t } 
 
\t </style> 
 
\t 
 
</head> 
 
<body ng-app="sample"> 
 

 
<div ng-controller="test"> 
 
<div data-ng-init="names=[{name:'XML'},{name:'Java'},{name:'Tutorial'}]"> 
 
     <ul> 
 
      <li data-ng-repeat="myObject in names"><a href="javascript:void(0);" ng-model="toggle" ng-class="toggle ? 'active' : ''" ng-click="toggle=!toggle; getActiveLength();">{{myObject.name}}</a></li> 
 
     </ul> 
 
    </div> 
 
</div> 
 

 
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.6.5/angular.min.js"></script> 
 
<script type="text/javascript"> 
 
\t angular.module('sample',[]).controller('test', function($scope, $timeout){ 
 
\t \t $scope.getActiveLength = function() { 
 
\t \t \t $timeout(function(){ 
 
\t \t \t \t var total = angular.element(document.querySelectorAll(".active")).length; 
 
\t \t \t \t console.log("Length " + total); 
 
\t \t \t 
 
\t \t \t },500) 
 
\t \t } 
 

 
\t }) 
 
</script> 
 
</body> 
 
</html>

親切に、より良い解決策を掲載して示唆しています。

答えて

0

あなたはアンカータグをクリックしたときに起こる物事のカップルがあります:と呼ばれるgetActiveLength()

と呼ばれる

  1. toggle値は
  2. getActiveLength()を変更するには、toggleの値ものの角が$digestのプロセスが完了していないのでDOMに反映されません。だから、$scope.$$postDigestを使ってダイジェスト後のアクティブな要素をチェックする必要があります。あなたのソリューションのための

    angular.module('sample',[]).controller('test', function($scope){ 
     
        $scope.getActiveLength = function(myObject) { 
     
        $scope.$$postDigest(function() { 
     
         var total = angular.element(document.querySelectorAll(".active")).length; 
     
         console.log("Length " + total); 
     
        }); 
     
        } 
     
    })
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.1/angular.min.js"></script> 
     
    <body ng-app="sample"> 
     
        <div ng-controller="test"> 
     
        <div data-ng-init="names=[{name:'XML'},{name:'Java'},{name:'Tutorial'}]"> 
     
         <ul> 
     
          <li data-ng-repeat="myObject in names"> 
     
          <a href="javascript:void(0);" ng-class="toggle ? 'active' : ''" ng-click="toggle=!toggle; getActiveLength();">{{myObject.name}} 
     
          </a> 
     
          </li> 
     
         </ul> 
     
        </div> 
     
        </div> 
     
    </body>

+0

おかげで、申し訳ありませんが、そのangularJsバージョンで作業していません。私はバージョン1.6.1を使用したい vadlamani

+0

@vadlamani私は ' 1.6.1'となり、正常に動作しているようです。あなたのコードを分かち合い、あなたを助けてください! – MrNobody

+0

1.6.1では最初の選択要素をクリックしている間に長さが0になっています。一度確認してください。 – vadlamani

関連する問題