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

  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吧……

  

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

  还是多学习!

  

angularJs实现星星等级评分的更多相关文章

  1. angularjs实现星星评分

    angularjs实现星星评分 自定义指令 app.directive('myStars', function () { return { require : '?ngModel', // ?ngMo ...

  2. css两种动态显示星星等级的比较(一星、两星、三星、四星、五星)

    原文:css两种动态显示星星等级的比较(一星.两星.三星.四星.五星) 以下是显示后的图片,相信在很多网站上都能看到这种效果,目前我知道两种实现方式 1.background-position加上一张 ...

  3. discuz修改太阳,月亮,星星等级图标

    想必大家都想修改一下默认的等级图标吧,刚才在论坛上看见很多大神的方法都是要修改文件的,不过为了安全起见需要事先备份好才改,这种方法是可行的,但可能有些新手站长不会修改,又或者改错了恢复不来,现在我教大 ...

  4. (线段树 -星星等级)Stars POJ - 2352

    题意: 给出n个星星的坐标 x,y ,当存在其他星星的坐标x1,y1满足x>=x1&&y>=y1时 这个星星的等级就加1. 注意: 题中给的数据是有规律的 ,y是逐渐增加的 ...

  5. 【SE】Week3 : 四则运算式生成评分工具Extension&Release Version(结对项目)

    Foreword 此次的结对项目终于告一段落,除了本身对软件开发的整体流程有了更深刻的了解外,更深刻的认识应该是结对编程对这一过程的促进作用. 在此想形式性但真心地啰嗦几句,十分感谢能端同学能够不厌其 ...

  6. 【转载】协同过滤 & Spark机器学习实战

    因为协同过滤内容比较多,就新开一篇文章啦~~ 聚类和线性回归的实战,可以看:http://www.cnblogs.com/charlesblc/p/6159187.html 协同过滤实战,仍然参考:h ...

  7. 交替最小二乘ALS

    https://www.cnblogs.com/hxsyl/p/5032691.html http://www.cnblogs.com/skyEva/p/5570098.html 1. 基础回顾 矩阵 ...

  8. ecshop 给商品随机添加评论

    <?php /* * 随机插入商品评论 * * * */ define('IN_ECS', true); require(dirname(__FILE__) . '/includes/init. ...

  9. iOS 重写UITableViewCell之动态获取label文字的宽度进行布局

    #import <UIKit/UIKit.h> @interface AppDelegate : UIResponder <UIApplicationDelegate> @pr ...

随机推荐

  1. [VS2008] 安装 AnkhSVN 后,选项中选择它,Pending Changes 窗口一闪而过,源代码管理工具自动跳回 【None】

    执行以下命令以修复: "C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE\devenv.exe" /re ...

  2. 委托学习总结(二)匿名方法和lambda表达式

    之前总结了委托这个困惑着大多初学者的概念,继续来学习匿名方法和lambda表达式 (1)我们之前写了这样一段代码 //自定义一个委托 public delegate int Expression(in ...

  3. 关于easyUI一些标签的使用

    ①table: 1.class="easyui-datagrid":指定为easyUI的表格布局 2.pagination="true":带分页的表格 3.ro ...

  4. [控件] ChangeColorLabel

    ChangeColorLabel 效果 源码 // // ChangeColorLabel.h // YXMWeather // // Created by XianMingYou on 15/6/2 ...

  5. 使用 Versions for mac 进行版本控制

    刚开始折腾 xcode 5.1 自己的svn版本控制,应该很好用,但是用不好,搞了半天也没法把工程传到svn服务器上去. 在 xcode 5.1 Soure Control 中弄 点击 Check O ...

  6. Linux 系统的网络基础_【all】

    网络基础 1.网线:568B: 白橙 橙色 白绿 蓝色 白蓝 绿色 白棕 棕色 2.交换机:电信号转发的网络设备,它可以为接入交换机的任2个网络节点设备提供电信号通信 3.路由器:连接局域网,广域网的 ...

  7. yii 验证码功能的实现

    首先知晓我们在使用验证码的时候通常是和我们的表单小部件配合使用首先我们创建model层 新建一个php文件 名字叫做Verifycode.php 要在我们的model层 创建我们的验证码的验证规则,我 ...

  8. mysql创建表的注意事项

    1 库名,表名,字段名必须使用小写字母,"_"分割. 2 库名,表名,字段名必须不超过12个字符. 3 库名,表名,字段名见名识意,建议使用名词而不是动词. 4 建议使用InnoD ...

  9. IKVM.NET入门(1)

    IKVM.NET是一个针对Mono和微软.net框架的java实现,其设计目的是在.NET平台上运行java程序.本文将比较详细的介绍这个工具的原理.使用入门(如何java应用转换为.NET应用.如何 ...

  10. CSS3新特性2D、3D效果讲解

    希望这篇博客可以对你有所帮助,如果有什么技术上的问题,希望我们可以做进一步的交流,如果你觉得我哪里阐述的不正确或者你有更好的更透彻的理解,也可以联系我,我在这里随时等着你. 对于css/html是每个 ...