StarRating
An AngularJS directive - StarRating.
by Annie Lagang
HTML
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
<div class="container" ng-app="app" ng-controller="appController">
<div>
<div class="alert alert-success"> <span class="label label-info">Star Rating: Read/Write</span>
<div star-rating rating="starRating1" read-only="false" max-rating="10" click="click1(param)" mouse-hover="mouseHover1(param)" mouse-leave="mouseLeave1(param)"></div>
<div> <span class="label label-primary">Star Rating: {{starRating1}}</span>
<span class="label label-primary">Hover Rating: {{hoverRating1}}</span>
</div>
</div>
<div class="alert alert-danger"> <span class="label label-info">Star Rating: ReadOnly</span>
<div star-rating rating="starRating2" read-only="true" max-rating="7" click="click2(param)" mouse-hover="mouseHover2(param)" mouse-leave="mouseLeave2(param)"></div>
<div> <span class="label label-primary">Star Rating: {{starRating2}}</span>
<span class="label label-primary">Hover Rating: {{hoverRating2}}</span>
</div>
</div>
<div class="alert alert-info"> <span class="label label-info">Star Rating: Read/Write(with default values for readOnly & maxRating)</span>
<div star-rating rating="starRating3" click="click3(param)" mouse-hover="mouseHover3(param)" mouse-leave="mouseLeave3(param)"></div>
<div> <span class="label label-primary">Star Rating: {{starRating3}}</span>
<span class="label label-primary">Hover Rating: {{hoverRating3}}</span>
</div>
</div>
</div>
</div>
JavaScript
'use strict';
var app = angular.module('app', []);
app.controller('appController', ['$scope', function ($scope) {
$scope.starRating1 = 4;
$scope.starRating2 = 5;
$scope.starRating3 = 2;
$scope.hoverRating1 = $scope.hoverRating2 = $scope.hoverRating3 = 0;
$scope.click1 = function (param) {
console.log('Click(' + param + ')');
};
$scope.mouseHover1 = function (param) {
console.log('mouseHover(' + param + ')');
$scope.hoverRating1 = param;
};
$scope.mouseLeave1 = function (param) {
console.log('mouseLeave(' + param + ')');
$scope.hoverRating1 = param + '*';
};
$scope.click2 = function (param) {
console.log('Click');
};
$scope.mouseHover2 = function (param) {
console.log('mouseHover(' + param + ')');
$scope.hoverRating1 = param;
};
$scope.mouseLeave2 = function (param) {
console.log('mouseLeave(' + param + ')');
$scope.hoverRating2 = param + '*';
};
$scope.click3 = function (param) {
console.log('Click');
};
$scope.mouseHover3 = function (param) {
console.log('mouseHover(' + param + ')');
$scope.hoverRating3 = param;
};
$scope.mouseLeave3 = function (param) {
console.log('mouseLeave(' + param + ')');
$scope.hoverRating3 = param + '*';
};
}]);
app.directive('starRating', function () {
return {
scope: {
rating: '=',
maxRating: '@',
readOnly: '@',
click: "&",
mouseHover: "&",
mouseLeave: "&"
},
restrict: 'EA',
template:
"<div style='display: inline-block; margin: 0px; padding: 0px; cursor:pointer;' ng-repeat='idx in maxRatings track by $index'> \
<img ng-src='{{((hoverValue + _rating) <= $index) && \"http://www.codeproject.com/script/ratings/images/star-empty-lg.png\" ||...