AngularJS实现星星等级评分功能


Posted in Javascript onSeptember 24, 2016

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

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

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
ASP.NET jQuery 实例18 通过使用jQuery validation插件校验DropDownList
Feb 03 Javascript
javascript 数组排序函数sort和reverse使用介绍
Nov 21 Javascript
jQuery圆形统计图开发实例
Jan 04 Javascript
Javascript中的arguments对象
Jun 20 Javascript
js循环map 获取所有的key和value的实现代码(json)
May 09 Javascript
浅谈Node.js 沙箱环境
May 15 Javascript
微信小程序之多列表的显示和隐藏功能【附源码】
Aug 06 Javascript
angularJs中跳转到指定的锚点实例($anchorScroll)
Aug 31 Javascript
简述vue-cli中chainWebpack的使用方法
Jul 30 Javascript
解决layui-table单元格设置为百分比在ie8下不能自适应的问题
Sep 28 Javascript
Javascript实现鼠标点击冒泡特效
Dec 24 Javascript
使用vue实现通过变量动态拼接url
Jul 22 Javascript
完美的js div拖拽实例代码
Sep 24 #Javascript
javascript 解决浏览器不支持的问题
Sep 24 #Javascript
JavaScript生成验证码并实现验证功能
Sep 24 #Javascript
JavaScript实现横线提示输入验证码随输入验证码输入消失的方法
Sep 24 #Javascript
javascript 分号总结及详细介绍
Sep 24 #Javascript
Bootstrap对话框使用实例讲解
Sep 24 #Javascript
基于chosen插件实现人员选择树搜索自动筛选功能
Sep 24 #Javascript
You might like
mysql数据库差异比较的PHP代码
2012/02/05 PHP
php中的strpos使用示例
2014/02/27 PHP
php实现session自定义会话处理器的方法
2015/01/27 PHP
thinkphp5框架扩展redis类方法示例
2019/05/06 PHP
JavaScript 输入框内容格式验证代码
2010/02/11 Javascript
JQuery与Ajax调用新浪API获取短网址的代码
2014/02/07 Javascript
详谈js中数组(array)和对象(object)的区别
2017/02/27 Javascript
完美实现js焦点轮播效果(一)
2017/03/07 Javascript
微信小程序tabbar不显示解决办法
2017/06/08 Javascript
解决npm管理员身份install时出现权限的问题
2018/03/16 Javascript
vue的传参方式汇总和router使用技巧
2018/05/22 Javascript
JavaScript私有变量实例详解
2019/01/24 Javascript
VUE中使用HTTP库Axios方法详解
2020/02/05 Javascript
Vue自定义组件双向绑定实现原理及方法详解
2020/09/03 Javascript
[01:28:56]2014 DOTA2华西杯精英邀请赛 5 24 CIS VS DK
2014/05/26 DOTA
python基础入门详解(文件输入/输出 内建类型 字典操作使用方法)
2013/12/08 Python
python使用any判断一个对象是否为空的方法
2014/11/19 Python
python实现数独算法实例
2015/06/09 Python
fastcgi文件读取漏洞之python扫描脚本
2017/04/23 Python
python爬虫使用cookie登录详解
2017/12/27 Python
Django 用户登陆访问限制实例 @login_required
2020/05/13 Python
使用Python通过oBIX协议访问Niagara数据的示例
2020/12/04 Python
HTML5中的Article和Section元素认识及使用
2013/03/22 HTML / CSS
中国旅游网站:同程旅游
2016/09/11 全球购物
科茨沃尔德家居商店:Scotts of Stow
2018/06/29 全球购物
莫斯科大型旅游休闲商品超市:Camping.ru
2020/09/16 全球购物
神路信息Java面试题目
2013/03/31 面试题
华为慧通笔试题
2016/04/22 面试题
企业管理部经理岗位职责
2013/12/24 职场文书
校园之声广播稿
2014/01/31 职场文书
《和田的维吾尔》教学反思
2014/04/14 职场文书
五一劳动节慰问信
2015/02/14 职场文书
共青团员自我评价
2015/03/10 职场文书
2015新生加入学生会自荐书
2015/03/24 职场文书
物业项目经理岗位职责
2015/04/01 职场文书
民事纠纷协议书
2016/03/23 职场文书