AngularJS實(shí)現(xiàn)星星等級(jí)評(píng)分功能
星期六加班,教育后臺(tái)也要有星級(jí)評(píng)分等級(jí)的需求,醉了……基本知道些怎么做,網(wǎng)上也隨便找了找,沒(méi)什么合意的,畢竟需求不同,也不能完全一樣不是。學(xué)習(xí)之,改之╮(╯▽╰)╭
Directive
angular.module('XXX').directive('stars', stars);
function stars() {
var directive = {
restrict: 'AE',
template: '<ul class="rating" ng-mouseleave="leave()">' +
'<li ng-repeat="star in stars" ng-class="star" ng-click="click($index + 1)" ng-mouseover="over($index + 1)">' +
'<i class="glyphicon glyphicon-star stars"></i>' +
'</li>' +
'</ul>',
scope: {
ratingValue: '=',
hoverValue: '=',
max: '=',
onHover: '=',
onLeave: '='
},
controller: startsController,
link: function(scope, elem, attrs) {
elem.css("display", "block");
elem.css("text-align", "center");
var updateStars = function() {
scope.stars = [];
for (var i = 0; i < scope.max; i++) {
scope.stars.push({
filled: i < scope.ratingValue
});
}
};
updateStars();
var updateStarsHover = function() {
scope.stars = [];
for (var i = 0; i < scope.max; i++) {
scope.stars.push({
filled: i < scope.hoverValue
});
}
};
updateStarsHover();
scope.$watch('ratingValue', function(oldVal, newVal) {
if (newVal) {
updateStars();
}
});
scope.$watch('hoverValue', function(oldVal, newVal) {
if (newVal) {
updateStarsHover();
}
});
}
};
return directive;
/** @ngInject */
function startsController($scope) {
// var vm = this;
$scope.click = function(val) {
$scope.ratingValue = val;
};
$scope.over = function(val) {
$scope.hoverValue = val;
};
$scope.leave = function() {
$scope.onLeave();
}
}
}
CSS
.rating {
color: #a9a9a9;
margin: 0;
padding: 0;
text-align: center;
}
ul.rating {
display: inline-block;
}
.rating li {
list-style-type: none;
display: inline-block;
padding: 1px;
text-align: center;
font-weight: bold;
cursor: pointer;
}
.rating .filled {
color: #f00;
}
.rating .stars{
font-size: 20px;
margin-right: 5px;
}
Controller
//星星等級(jí)評(píng)分
$scope.max = 6;
$scope.ratingVal = 6;
$scope.hoverVal = 6;//我這需求是默認(rèn)六個(gè)星全滿(淡騰,反正也招不出神龍.因?yàn)檫€差一個(gè).)一般的話,ratingVal和hoverVal都寫(xiě)0就可以了。
$scope.onHover = function(val) {
$scope.hoverVal = val;
};
$scope.onLeave = function() {
$scope.hoverVal = $scope.ratingVal;
}
$scope.onChange = function(val) {
$scope.ratingVal = val;
}
HTML
<stars rating-value="ratingVal" hover-value="hoverVal" max="max" on-hover="onHover" on-leave="onLeave"></stars>
ratingVal:{{ratingVal}};<br/>
hoverVal:{{hoverVal}}
說(shuō)幾句, 星星那東西,可以直接輸入法敲出來(lái),也可以用unicode搞出來(lái),字體文件什么的都行,你要硬用圖片的話……把ngClass換成ngSrc也可以試試,代碼改改也行,精靈圖改改background-position也湊合過(guò),╮(╯▽╰)╭ 想了一下,比較累,祝你成功。
如果是那種商城網(wǎng)站只是要看評(píng)價(jià)等級(jí)的話,復(fù)用代碼也可以,加個(gè)readonly屬性。
directive:
scope: {
readonly: '@'
}
function startsController($scope) {
// var vm = this;
$scope.click = function(val) {
if ($scope.readonly) {
return;
}
$scope.ratingValue = val;
};
$scope.over = function(val) {
if ($scope.readonly) {
return;
}
$scope.hoverValue = val;
};
}
controller:
$scope.readonly = false;
html:
readonly={{readonly}}.
寫(xiě)到這,突然意識(shí)到今后一定會(huì)改需求,加功能(已然習(xí)慣)。我還是默默地加上readonly吧……
指令這玩意,深了很繞,我也弄不熟,每次寫(xiě)還得翻翻以前寫(xiě)的代碼,畢竟渣渣。每次不要復(fù)用的代碼,我都懶得用指令,畢竟菜鳥(niǎo)。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- JS實(shí)現(xiàn)星星評(píng)分功能實(shí)例代碼(兩種方法)
- jquery插件star-rating.js實(shí)現(xiàn)星級(jí)評(píng)分特效
- js點(diǎn)亮星星評(píng)分并獲取參數(shù)的js代碼
- js星星評(píng)分效果
- JS實(shí)現(xiàn)帶提示的星級(jí)評(píng)分效果完整實(shí)例
- javascript實(shí)現(xiàn)五星評(píng)分功能
- js實(shí)現(xiàn)的星星評(píng)分功能函數(shù)
- javascript 星級(jí)評(píng)分效果(手寫(xiě))
- JavaScript制作淘寶星級(jí)評(píng)分效果的思路
- css+html+js實(shí)現(xiàn)五角星評(píng)分
相關(guān)文章
Angular.Js中ng-include指令的使用與實(shí)現(xiàn)
ng-include 指令用于包含外部的 HTML 文件。包含的內(nèi)容將作為指定元素的子節(jié)點(diǎn)。下面這篇文章主要給大家介紹了Angular.Js中ng-include指令的使用與實(shí)現(xiàn)的相關(guān)資料,文中介紹的非常詳細(xì),需要的朋友們下面來(lái)一起看看吧。2017-05-05
AngularJS監(jiān)聽(tīng)路由的變化示例代碼
這篇文章給大家分享了如何利用AngularJS監(jiān)聽(tīng)路由的變化,文中給出了示例代碼相信對(duì)大家的理解很有幫助,有需要的朋友們可以參考借鑒。2016-09-09
AngularJS通過(guò)ng-Img-Crop實(shí)現(xiàn)頭像截取的示例
本篇文章主要介紹了AngularJS通過(guò)ng-Img-Crop實(shí)現(xiàn)頭像截取的示例,具有一定的參考價(jià)值,有興趣的可以了解一下2017-08-08
詳解JavaScript的AngularJS框架中的作用域與數(shù)據(jù)綁定
這篇文章主要介紹了JavaScript的AngularJS框架中的作用域與數(shù)據(jù)綁定,包括作用域的繼承以及數(shù)據(jù)的單向和雙向綁定等重要知識(shí)點(diǎn),需要的朋友可以參考下2016-03-03
AngularJS控制器controller給模型數(shù)據(jù)賦初始值的方法
這篇文章主要介紹了AngularJS控制器controller給模型數(shù)據(jù)賦初始值的方法,涉及AngularJS控制器controller簡(jiǎn)單賦值操作實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-01-01
Angular 利用路由跳轉(zhuǎn)到指定頁(yè)面的指定位置方法
今天小編就為大家分享一篇Angular 利用路由跳轉(zhuǎn)到指定頁(yè)面的指定位置方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-08-08
Angular7實(shí)現(xiàn)拖放Drag?Drop示例詳解
這篇文章主要介紹了Angular7實(shí)現(xiàn)拖放Drag?Drop示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12

