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 相关文章推荐
js局部刷新页面时间具体实现
Jul 04 Javascript
js select option对象小结
Dec 20 Javascript
JQuery打造省市下拉框联动效果
May 18 Javascript
JavaScript实现twitter puddles算法实例
Dec 06 Javascript
js表单验证实例讲解
Mar 31 Javascript
原生JavaScript实现Ajax的方法
Apr 07 Javascript
Javascript将字符串日期格式化为yyyy-mm-dd的方法
Oct 27 Javascript
bootstrap导航栏、下拉菜单、表单的简单应用实例解析
Jan 06 Javascript
Bootstrap Table使用整理(一)
Jun 09 Javascript
详解使用jest对vue项目进行单元测试
Sep 07 Javascript
原生js实现可兼容PC和移动端的拖动滑块功能详解【测试可用】
Aug 15 Javascript
微信小程序实现左侧滑动导航栏
Apr 08 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
php中DOMDocument简单用法示例代码(XML创建、添加、删除、修改)
2010/12/19 PHP
thinkphp路由规则使用示例详解和伪静态功能实现(apache重写)
2014/02/24 PHP
如何使用微信公众平台开发模式实现多客服
2016/01/06 PHP
简单谈谈PHP中的include、include_once、require以及require_once语句
2016/04/23 PHP
php 开发中加密的几种方法总结
2017/03/22 PHP
JavaScript 实现模态对话框 源代码大全
2009/05/02 Javascript
JQuery实现倒计时按钮的实现代码
2012/03/23 Javascript
js用正则表达式来验证表单(比较齐全的资源)
2013/11/17 Javascript
以JSON形式将JS中Array对象数组传至后台的方法
2014/01/06 Javascript
jQuery中ajax的load()方法用法实例
2014/12/26 Javascript
jQuery实现的无限级下拉菜单功能示例
2016/09/12 Javascript
利用JQuery操作iframe父页面、子页面的元素和方法汇总
2017/09/10 jQuery
详解JSON Web Token 入门教程
2018/07/30 Javascript
Vue瀑布流插件的使用示例
2018/09/19 Javascript
微信小游戏之使用three.js 绘制一个旋转的三角形
2019/06/10 Javascript
vue之debounce属性被移除及处理详解
2019/11/13 Javascript
原生js实现html手机端城市列表索引选择城市
2020/06/24 Javascript
[57:41]Secret vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[00:48]食人魔魔法师至宝“金鹏之幸”全新模型和自定义特效展示
2019/12/19 DOTA
TensorFlow在MAC环境下的安装及环境搭建
2017/11/14 Python
python3+PyQt5实现自定义流体混合窗口部件
2018/04/24 Python
Python中文件的读取和写入操作
2018/04/27 Python
python3 cvs将数据读取为字典的方法
2018/12/22 Python
Python lxml解析HTML并用xpath获取元素的方法
2019/01/02 Python
详解numpy.meshgrid()方法使用
2019/08/01 Python
在python中利用dict转json按输入顺序输出内容方式
2020/02/27 Python
使用pth文件添加Python环境变量方式
2020/05/26 Python
python如何写try语句
2020/07/14 Python
英国第二大营养品供应商:Vitabiotics
2016/10/01 全球购物
Java的五个基础面试题
2016/02/26 面试题
SQL Server数据库笔试题和答案
2016/02/04 面试题
医学毕业生自我鉴定
2013/10/30 职场文书
医院安全生产月活动总结
2014/07/05 职场文书
借条如何写
2015/05/26 职场文书
JDBC连接的六步实例代码(与mysql连接)
2021/05/12 MySQL
Vue Element-ui表单校验规则实现
2021/07/09 Vue.js