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 相关文章推荐
漂亮的widgets,支持换肤和后期开发新皮肤(2007-4-27已更新1.7alpha)
Apr 27 Javascript
基于jquery的回到页面顶部按钮
Jun 27 Javascript
JS代码放在head和body中的区别分析
Dec 01 Javascript
jQuery中判断一个元素是否为另一个元素的子元素(或者其本身)
Mar 21 Javascript
javascript动画浅析
Aug 30 Javascript
网站如何做到完全不需要jQuery也可以满足简单需求
Jun 27 Javascript
javascript实现一个简单的弹出窗
Feb 22 Javascript
在js代码拼接dom对象到页面上去的模板总结(必看)
Feb 14 Javascript
JavaScript实现计数器基础方法
Oct 10 Javascript
详解angular如何调用HTML字符串的方法
Jun 30 Javascript
如何在基于vue-cli的项目自定义打包环境
Nov 10 Javascript
element表格翻页第2页从1开始编号(后端从0开始分页)
Dec 10 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
Laravel 5框架学习之数据库迁移(Migrations)
2015/04/08 PHP
jquery photoFrame 图片边框美化显示插件
2010/06/28 Javascript
JavaScript实现关键字高亮功能
2014/11/12 Javascript
极易被忽视的javascript面试题七问七答
2016/02/15 Javascript
jQuery实现的右下角广告窗体跟随效果示例
2016/09/16 Javascript
js浏览器html5表单验证
2016/10/17 Javascript
jQuery实现立体式数字动态增加(animate方法)
2016/12/21 Javascript
Angularjs单选改为多选的开发过程及问题解析
2017/02/17 Javascript
nodejs连接mysql数据库简单封装示例-mysql模块
2017/04/10 NodeJs
javascript实现数字配对游戏的实例讲解
2017/12/14 Javascript
VUE中使用MUI方法
2019/02/12 Javascript
使用js实现一个简单的滚动条过程解析
2019/09/10 Javascript
VUE实现密码验证与提示功能
2019/10/18 Javascript
在Vuex中Mutations修改状态操作
2020/07/24 Javascript
python编码总结(编码类型、格式、转码)
2016/07/01 Python
python xml解析实例详解
2016/11/14 Python
Python实现的HMacMD5加密算法示例
2018/04/03 Python
python matlibplot绘制3D图形
2018/07/02 Python
Python中捕获键盘的方式详解
2019/03/28 Python
PyTorch搭建一维线性回归模型(二)
2019/05/22 Python
Python实现手势识别
2020/10/21 Python
Pycharm配置lua编译环境过程图解
2020/11/28 Python
css3中新增的样式使用示例附效果图
2014/08/19 HTML / CSS
BIBLOO波兰:捷克的一家在线服装店
2018/03/09 全球购物
激光脱毛、蓝光和护肤:Tria Beauty
2019/03/28 全球购物
创立科技Java面试题
2015/11/29 面试题
管理科学大学生求职信
2013/11/13 职场文书
工程招投标邀请书
2014/01/30 职场文书
假面舞会策划方案
2014/05/29 职场文书
领导干部查摆“四风”问题自我剖析材料思想汇报
2014/10/05 职场文书
2014财务年终工作总结
2014/12/08 职场文书
优秀少先队员事迹材料
2014/12/24 职场文书
董存瑞观后感
2015/06/11 职场文书
《秋天的雨》教学反思
2016/02/19 职场文书
工作总结之小学教师体育工作范文(3篇)
2019/10/07 职场文书
python使用pymysql模块操作MySQL
2021/06/16 Python