2017-02-21 2 views
2

Ich habe diesen Code:Versuch ng-Klasse mit ng-Mouseover- und ng-mouseleave ändern

Controller:

var ratingTotal = 5; 
$scope.count = 0; 
$scope.getRepeater = function() { 
     return new Array(ratingTotal); 
}; 

HTML:

<div> 
    <span ng-repeat="r in getRepeater() track by $index" ng-mouseover="count = count + 1" ng-mouseleave="count =count-1" ng-class="{'icon-star-full': ($index + 1) <= count, 'icon-star-empty': ($index + 1) >= count}"></span> 
</div> 

und ich versuche zu make icon-start-full, indem man die Maus über das Icon fährt und verschwindet, wenn man das div verlässt, aber es hat nicht funktioniert

PD: class icon-start- voll und Symbol-Start-leer sind icomoon Klassen

+0

erledigt diese Ihnen helfen? [mit mouseover in angular] (http://stackoverflow.com/questions/22532656/ng-mouseover-and-leave-to-toggle-item-using-mouse-in-angularjs) – Soorena

+0

Warum nicht einfach Count gleich $ setzen Index (oder $ index + 1, wenn Sie Bewertung 1-5 und nicht 0-4) auf mouseover? – mhodges

+0

@mhodges funktioniert es, wie Sie sagen, wenn ich mouseleave entfernen, aber ich möchte mouseleave auch – DavidAlzate88

Antwort

3

Es ist aus Herumspielen mit diesem Code für ein paar Minuten, dass die count Variable in den ng-mouseleaveng-mouseover, Bezug genommen wird, und ng-class ist nicht die gleiche Variable. Angular hat einige abgefahrene Dinge manchmal mit variabler Scoping so, und so ist dies ein perfektes Beispiel dafür, warum Sie immer die controller as Syntax in AngularJS verwenden sollten. Es ist gut dokumentiert Here, by Todd Motto wie und warum es zu verwenden.

So können Sie Ihren Code so ändern, dass er mit controller as funktioniert, damit Sie nicht auf Probleme stoßen, mit denen Sie Probleme haben.

var app = angular.module("myApp", []) 
 
.controller("myCtrl", function(){ 
 
    var $this = this; 
 
    var ratingTotal = 5; 
 
    $this.count = 0; 
 
    $this.getRepeater = function() { 
 
    return new Array(ratingTotal); 
 
    }; 
 
});
.icon-star-full, .icon-star-empty { 
 
    padding: 10px; 
 
} 
 
.icon-star-full { 
 
    background: yellow; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<div ng-app="myApp" ng-controller="myCtrl as Main"> 
 
    <div> 
 
    <span ng-repeat="r in Main.getRepeater() track by $index" ng-mouseover="Main.count = $index + 1" ng-mouseleave="Main.count = 0" ng-class="{'icon-star-full': ($index + 1) <= Main.count, 'icon-star-empty': ($index + 1) >= Main.count}">{{$index + 1}}</span> 
 
    </div> 
 
</div>

+0

danke, du bist super! – DavidAlzate88

+0

@ DavidAlzate88 Gern geschehen! Froh ich könnte helfen =) – mhodges