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 相关文章推荐
慎用 somefunction.prototype 分析
Jun 02 Javascript
方便实用的jQuery checkbox复选框全选功能简单实例
Oct 09 Javascript
JavaScript监听和禁用浏览器回车事件实例
Jan 31 Javascript
在JavaScript中使用对数Math.log()方法的教程
Jun 15 Javascript
浅谈Javascript实现继承的方法
Jul 06 Javascript
JS实现图片的不间断连续滚动的简单实例
Jun 03 Javascript
jQuery Select下拉框操作小结(推荐)
Jul 22 Javascript
基于JavaScript实现跳转提示页面
Sep 24 Javascript
seajs实现强制刷新本地缓存的方法分析
Oct 16 Javascript
详解vue-meta如何让你更优雅的管理头部标签
Jan 18 Javascript
JS动态插入脚本和插入引用外部链接脚本的方法
May 21 Javascript
基于node简单实现RSA加解密的方法步骤
Mar 21 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
定制404错误页面,并发信给管理员的程序
2006/10/09 PHP
php获取淘宝分类id示例
2014/01/16 PHP
javascript 一个函数对同一元素的多个事件响应
2009/07/25 Javascript
JavaScript获取FCK编辑器信息的具体方法
2013/07/12 Javascript
全面解析Bootstrap表单使用方法(表单控件状态)
2015/11/24 Javascript
JS从一组数据中找到指定的单条数据的方法
2016/06/02 Javascript
微信公众号-获取用户信息(网页授权获取)实现步骤
2016/10/21 Javascript
使用Vue.js创建一个时间跟踪的单页应用
2016/11/28 Javascript
Angularjs通过指令监听ng-repeat渲染完成后执行脚本的方法
2016/12/31 Javascript
JS Select下拉框(支持输入模糊查询)
2017/02/04 Javascript
Angular.js中angular-ui-router的简单实践
2017/07/18 Javascript
基于jQuery实现的单行公告活动轮播效果
2017/08/23 jQuery
vue 录制视频并压缩视频文件的方法
2018/07/27 Javascript
浅析JS中什么是自定义react数据验证组件
2018/10/19 Javascript
JavaScript禁用右键单击优缺点分析
2019/01/20 Javascript
js实现简单掷骰子小游戏
2019/10/24 Javascript
使用 Github Actions 自动部署 Angular 应用到 Github Pages的方法
2020/07/20 Javascript
Python批量修改文件后缀的方法
2014/01/26 Python
python抽象基类用法实例分析
2015/06/04 Python
Python实现1-9数组形成的结果为100的所有运算式的示例
2017/11/03 Python
Python中对象的引用与复制代码示例
2017/12/04 Python
Python之ReportLab绘制条形码和二维码的实例
2018/01/15 Python
Python爬取qq空间说说的实例代码
2018/08/17 Python
Python完成哈夫曼树编码过程及原理详解
2019/07/29 Python
关于sys.stdout和print的区别详解
2019/12/05 Python
Python引入多个模块及包的概念过程解析
2020/09/21 Python
如何通过安装HomeBrew来安装Python3
2020/12/23 Python
初一英语教学反思
2014/01/11 职场文书
团日活动策划书
2014/02/01 职场文书
我爱读书演讲稿
2014/05/07 职场文书
如何写早恋检讨书
2014/09/10 职场文书
医生见习报告范文
2014/11/03 职场文书
小学班主任经验交流材料
2014/12/16 职场文书
岗位职责范本大全
2015/02/26 职场文书
九年级化学教学反思
2016/02/22 职场文书
剖析后OpLog订阅MongoDB的数据变更就没那么难了
2022/02/24 MongoDB