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 相关文章推荐
JavaScript 节点操作 以及DOMDocument属性和方法
Dec 06 Javascript
js事件冒泡实例分享(已测试)
Apr 23 Javascript
JS实现从连接中获取youtube的key实例
Jul 02 Javascript
JavaScript学习笔记(三):JavaScript也有入口Main函数
Sep 12 Javascript
BootStrap无限级分类(无限极分类封装版)
Aug 26 Javascript
详解用node搭建简单的静态资源管理器
Aug 09 Javascript
mui 打开新窗口的方式总结及注意事项
Aug 20 Javascript
Javascript快速实现浏览器系统通知
Aug 26 Javascript
JS库中的Particles.js在vue上的运用案例分析
Sep 13 Javascript
vue的diff算法知识点总结
Mar 29 Javascript
vue中倒计时组件的实例代码
Jul 06 Javascript
setTimeout与setInterval的区别浅析
Mar 23 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多个图片压缩成ZIP的方法
2020/08/18 PHP
document.designMode的功能与使用方法介绍
2007/11/22 Javascript
JavaScript获取多个数组的交集简单实例
2013/11/11 Javascript
jquery基础教程之deferred对象使用方法
2014/01/22 Javascript
JavaScript实现的图像模糊算法代码分享
2014/04/22 Javascript
JavaScript、jQuery与Ajax的关系
2016/01/24 Javascript
jQuery获取元素父节点的方法
2016/06/21 Javascript
js字符串引用的两种方式(必看)
2016/09/18 Javascript
jQuery弹出层插件popShow用法示例
2017/01/23 Javascript
使用JavaScript判断用户输入的是否为正整数(两种方法)
2017/02/05 Javascript
js鼠标经过tab选项卡时实现切换延迟
2017/03/24 Javascript
JS实现的四级密码强度检测功能示例
2017/05/11 Javascript
原生JS与jQuery编写简单选项卡
2017/10/30 jQuery
Vue二次封装axios为插件使用详解
2018/05/21 Javascript
vue+element实现表格新增、编辑、删除功能
2019/05/28 Javascript
微信小程序iOS下拉白屏晃动问题解决方案
2019/10/12 Javascript
小程序跨页面交互的作用与方法详解
2020/01/07 Javascript
TypeScript的安装、使用、自动编译的实现
2020/04/10 Javascript
JS array数组检测方式解析
2020/05/19 Javascript
VSCode插件安装完成后的配置(常用配置)
2020/08/24 Javascript
[03:03]2014DOTA2国际邀请赛 EG战队专访
2014/07/12 DOTA
[05:06]2017亚洲邀请赛DAC回顾片
2017/04/19 DOTA
Python对List中的元素排序的方法
2018/04/01 Python
解决Spyder中图片显示太小的问题
2018/04/27 Python
Anaconda和ipython环境适配的实现
2020/04/22 Python
CSS3的 fit-content实现水平居中
2017/09/07 HTML / CSS
加拿大购物频道:The Shopping Channel
2016/07/21 全球购物
英国度假别墅预订:Sykes Cottages
2017/06/12 全球购物
电气自动化个人求职信范文
2014/02/03 职场文书
爱国演讲稿500字
2014/05/04 职场文书
校外活动方案
2014/08/28 职场文书
五星级酒店前台接待岗位职责
2015/04/02 职场文书
2016年三八红旗手先进事迹材料
2016/02/26 职场文书
Python常用配置文件ini、json、yaml读写总结
2021/07/09 Python
python opencv将多个图放在一个窗口的实例详解
2022/02/28 Python
Python的代理类实现,控制访问和修改属性的权限你都了解吗
2022/03/21 Python