星期六加班,教育后台也要有星级评分等级的需求,醉了……基本知道些怎么做,网上也随便找了找,没什么合意的,毕竟需求不同,也不能完全一样不是。学习之,改之╮(╯▽╰)╭

  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

        //星星等级评分
$scope.max = 6;
$scope.ratingVal = 6;
$scope.hoverVal = 6;//我这需求是默认六个星全满(淡腾,反正也招不出神龙.因为还差一个.)一般的话,ratingVal和hoverVal都写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}}

  说几句,

  星星那东西,可以直接输入法敲出来,也可以用unicode搞出来,字体文件什么的都行,你要硬用图片的话……把ngClass换成ngSrc也可以试试,代码改改也行,精灵图改改background-position也凑合过,╮(╯▽╰)╭ 想了一下,比较累,祝你成功。

  

  如果是那种商城网站只是要看评价等级的话,复用代码也可以,加个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}}.

  写到这,突然意识到今后一定会改需求,加功能(已然习惯)。我还是默默地加上readonly吧……

  

  指令这玩意,深了很绕,我也弄不熟,每次写还得翻翻以前写的代码,毕竟渣渣。每次不要复用的代码,我都懒得用指令,毕竟菜鸟。

  还是多学习!

  

最新文章

  1. 设置line-height:1.5和line-height:150%或者line-height:150px的区别
  2. [PHP源码阅读]array_push和array_unshift函数
  3. IFC格式简介
  4. js 模块化的一些理解和es6模块化学习
  5. linux下常见解压缩命令
  6. [Android Pro] android 4.4 Android原生权限管理:AppOps
  7. 济南学习 Day 2 T2 pm
  8. Java网络编程(TCP协议-服务端和客户端交互)
  9. C#设置textboox只能输入数字`
  10. 左右 android AES 所述机器的一部分 javax.crypto.BadPaddingException: pad block corrupted
  11. java 读取properties文件总结
  12. ERROR: unable to bind listening socket for address ’127
  13. Kompose: Docker-compose 到 Kubernetes 的迁移工具
  14. 页面获取Web控件ID不能正常获取,它惹得祸
  15. 常见js报错
  16. vs code配置flutter开发android
  17. Ubuntu 普通用户无法启动Google chrome
  18. componentWillReceiveProps详解(this.props)状态改变检测机制
  19. Django orm 实现批量插入数据
  20. Java程序员如何运用所掌握的技术构建一个完整的业务架构

热门文章

  1. C# Json转对象
  2. iOS设计模式 - 迭代器
  3. Python读写oracle数据库
  4. .Linode服务器的使用 网站迁移
  5. Bootstrap后台管理框架
  6. mysql 批量插入500W 测试
  7. Hadoop HBase概念学习系列之行、行键(十一)
  8. 将Python打包成可执行文件exe的心路历程
  9. 微信小程序------导航栏样式、tabBar导航栏
  10. HBase学习之路 (五)MapReduce操作Hbase