当前位置: 首页 > 编程笔记 >

AngularJS 一个简单的控件:评级

公良俊楚
2023-03-14
本文向大家介绍AngularJS 一个简单的控件:评级,包括了AngularJS 一个简单的控件:评级的使用技巧和注意事项,需要的朋友参考一下

示例

让我们构建一个简单的控件,一个评级小部件,旨在用作:

<rating min="0" max="5" nullifier="true" ng-model="data.rating"></rating>

暂时没有精美的CSS;这将呈现为:

0 1 2 3 4 5 x

点击一个数字即可选择该等级;然后点击“ x”,则将评分设置为null。

app.directive('rating', function() {

    function RatingController() {
       this._ngModel= null;
       this.rating= null;
       this.options= null;
       this.min= typeofthis.min=== 'number' ?this.min: 1;
       this.max= typeofthis.max=== 'number' ?this.max: 5;
    }
    
    RatingController.prototype.setNgModel = function(ngModel) {
       this._ngModel= ngModel;
        
        if( ngModel ) {
            // 要点1
            ngModel.$render = this._render.bind(this);
        }
    };
    
    RatingController.prototype._render = function() {
       this.rating= this._ngModel.$viewValue != null ? this._ngModel.$viewValue : -Number.MAX_VALUE;
    };
    
    RatingController.prototype._calculateOptions = function() {
        if(this.min== null ||this.max== null ) {
           this.options= [];
        }
        else {
           this.options= new Array(this.max -this.min+ 1);
            for( var i=0; i < this.options.length; i++ ) {
                this.options[i] =this.min+ i;
            }
        }
    };
    
    RatingController.prototype.setValue = function(val) {
       this.rating= val;
        // 要点2
        this._ngModel.$setViewValue(val);
    };
    
    // 要点3
    Object.defineProperty(RatingController.prototype, 'min', {
        get: function() {
            return this._min;
        },
        set: function(val) {
           this._min= val;
            this._calculateOptions();
        }
    });
    
    Object.defineProperty(RatingController.prototype, 'max', {
        get: function() {
            return this._max;
        },
        set: function(val) {
           this._max= val;
            this._calculateOptions();
        }
    });
    
    return {
        restrict: 'E',
        scope: {
            // 要点3
            min: '<?',
            max: '<?',
            nullifier: '<?'
        },
        bindToController: true,
        controllerAs: 'ctrl',
        controller: RatingController,
        require: ['rating', 'ngModel'],
        link: function(scope, elem, attrs, ctrls) {
            ctrls[0].setNgModel(ctrls[1]);
        },
        template:
            '<span ng-repeat="o in ctrl.options" href="#" class="rating-option" ng-class="{\'rating-option-active\': o <= ctrl.rating}" ng-click="ctrl.setValue(o)">{{ o }}</span>' +
            '<span ng-if="ctrl.nullifier" ng-click="ctrl.setValue(null)" class="rating-nullifier">&#10006;</span>'
    };
});

关键点:

  1. 实施ngModel.$render以将模型的视图值传输到您的视图。

  2. 每当您认为视图值应更新时就致电。ngModel.$setViewValue()

  3. 当然可以对控制进行参数设置;使用'<'范围绑定作为参数(如果在Angular> = 1.5中)以明确指示输入-一种单向绑定。如果必须在参数更改时采取措施,则可以使用JavaScript属性(请参阅参考资料)来保存一些手表。Object.defineProperty()

注1:为了不使实现复杂化,将额定值插入到数组-中ctrl.options。这是不需要的。一个更有效,但也更复杂,实现可以使用DOM操作时插入/删除收视率min/max变化。

注2:除'<'范围绑定外,此示例可在Angular <1.5中使用。如果您使用的是Angular> = 1.5,则最好将其转换为组件并使用生命周期钩子来初始化和,而不是在控制器的构造函数中进行初始化。$onInit()minmax

还有一个必要的提琴:https://jsfiddle.net/h81mgxma/

 类似资料:
  • 问题内容: 您使用什么约定来评论获取方法和设置方法?这是我很长时间以来一直想知道的事情: 我总是发现我几乎在为1a / b和2a / b写完全相同的东西,例如1a)设置员工的薪水,1b)员工的薪水。似乎太多余了。现在我可以看到,对于更复杂的内容,您可以在(a)部分中编写更多内容,以提供具体背景信息,但是对于大多数使用方法的人来说,措辞几乎完全相同。 我只是好奇,对于简单的获取者/设置者而言,仅填写

  • 问题内容: 我正在学习AngularJs的学习过程,发现几乎没有任何示例可用于现实世界。 我试图对如何使用最标准的组件提交表单并将其传递给PHP文件有一个清晰的了解。 我的小提琴。 有人在提交简单,无污染的表单方面有什么好的例子吗,这些表单会对我以及其他许多Angularjs初学者有所帮助。 当我说一个干净的表格时,我指的是这样的东西。 我的ng-app代码… 我猜我接下来要问的三个问题是… 我的

  • 星形评分控件,采用 core graphics实现,按分值百分比任意比例填充每一颗星星。与其他评分控件不一样的是,采取拖动slider的方式进行填充星星。 [Code4App.com]

  • 我们以一个下面简单的FreeRADIUS配置来开始这一章 本机作为一个NAS设备(RADIUS客户端) Alice定义为一个测试用户. 在我们已经定义客户端和测试用户之后, 我们将会使用radtest程序来作为RADIUS客户端的角色并且测试Alice的authentication.

  • 本文向大家介绍AngularJS中的表单简单入门,包括了AngularJS中的表单简单入门的使用技巧和注意事项,需要的朋友参考一下 AngularJS 表单 AngularJS 表单是输入控件的集合。 HTML 控件 以下 HTML input 元素被称为 HTML 控件: input 元素 select 元素 button 元素 textarea 元素 HTML 表单 HTML 表单通常与 HT

  • 本文向大家介绍使用Python实现一个简单的项目监控,包括了使用Python实现一个简单的项目监控的使用技巧和注意事项,需要的朋友参考一下 在公司里做的一个接口系统,主要是对接第三方的系统接口,所以,这个系统里会和很多其他公司的项目交互。随之而来一个很蛋疼的问题,这么多公司的接口,不同公司接口的稳定性差别很大,访问量大的时候,有的不怎么行的接口就各种出错了。 这个接口系统刚刚开发不久,整个系统中,