Angular.js: рдПрдирдЬреА-рдореЙрдбрд▓ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдореВрд▓реНрдп рдФрд░ рдЗрдирдкреБрдЯ рдХреА рд╕реНрдерд┐рддрд┐ [рдкреНрд░рдХрд╛рд░ = рд╢реНрд░реЗрдгреА] рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 18 рдорд╛рд░реНрдЪ 2014  ┬╖  35рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: angular/angular.js

рдореВрд▓ рд░реВрдк рд╕реЗ, рдПрдирдЬреА-рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде рдПрдХ рд░реЗрдВрдЬ рдЗрдирдкреБрдЯ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред HTML рддрддреНрд╡ рдХрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдорд╛рди рдФрд░ рд╢реНрд░реЗрдгреА рд╕реНрд▓рд╛рдЗрдбрд░ рдХреА рд╕реНрдерд┐рддрд┐ рдЧрд▓рдд рд╣реИред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд╕реНрд▓рд╛рдЗрдбрд░ рдЪрд░ рдФрд░ HTML рдЗрдирдкреБрдЯ рдореВрд▓реНрдп рдореЙрдбрд▓ рдЪрд░ рдХреЗ рд╕рд╛рде рд╕рд┐рдВрдХ рдореЗрдВ рд╣реЛрдЧрд╛ред

рдпрд╣рд╛рдБ рдПрдХ repro рд╣реИ: http://jsfiddle.net/fschwiet/HVp2J/

рд╡рд┐рдВрдбреЛрдЬ 8 рдкрд░ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдХреНрд░реЛрдо рдФрд░ рдлрд╛рдпрд░рдлреЙрдХреНрд╕ рдкрд░ рд╕рддреНрдпрд╛рдкрд┐рддред

рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдЗрдирдкреБрдЯ [рдкреНрд░рдХрд╛рд░ = рд╢реНрд░реЗрдгреА] рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рдореБрджреНрджреЗ рдЦреБрд▓реЗ рд╣реИрдВ, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╡реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВред

forms moderate duplicate broken expected use bug

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

GitHub рдХреА рдирдИ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд╕рд╛рде, рдЖрдкрдХреЛ рдЕрдм "+1" рдЯрд┐рдкреНрдкрдгреА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдЖрдк рдЗрд╕ рдореБрджреНрджреЗ рдореЗрдВ рдкрд╣рд▓реА рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд╢реАрд░реНрд╖-рджрд╛рдИрдВ рдУрд░ "+: рдореБрд╕реНрдХрд╛рди:" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рдЕрдкрдиреА рд░реБрдЪрд┐ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдлрд┐рд░ рдЪреБрдиреЗрдВ: +1: ("+1")ред рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдХреЛ рдПрдХ рдмреЗрдХрд╛рд░ рд╕реВрдЪрдирд╛ рднреЗрдЬрдиреЗ рд╕реЗ рдмрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╕рднреА 35 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдпрд╣ рдЕрднреА рднреА рдХреЛрдгреАрдп 1.2.14 рдХреЗ рд╕рд╛рде рдПрдХ рдореБрджреНрджрд╛ рд╣реИ: http://jsfiddle.net/HVp2J/7/

рдХрд╛рдо рдХреЗ рдЗрд░реНрдж-рдЧрд┐рд░реНрдж, рдПрдХ $ рдЯрд╛рдЗрдордЖрдЙрдЯ рд╣реИрдВрдбрд▓рд░ рдХреЗ рднреАрддрд░ рдореЙрдбрд▓ рдореВрд▓реНрдп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред

$ timeout doesn 'рдХреА рдорджрдж, рдореБрджреНрджрд╛ рдмрдирд╛ рд╣реБрдЖ рд╣реИред

@fschwiet : http://jsfiddle.net/HVp2J/9/

@ рд░рдЬрдд-рдЪреМрдзрд░реА рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдореБрдЭреЗ рдПрдХ рдХреЛрдб рд╕реИрдВрдкрд▓ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ $ рдЯрд╛рдЗрдордЖрдЙрдЯ рд╡рд░реНрдХ-рдЕрд░рд╛рдЙрдВрдб рдХреЗ рд░реВрдк рдореЗрдВ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ: http://jsfiddle.net/fschwiet/YC4av/

рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдкрд╛рд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореЙрдбрд▓ рд╡реИрд▓реНрдпреВ рдХреЛ рддрдм рддрдХ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рддрдХ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХреЗ рд▓рд┐рдП $ рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЙрд▓рдмреИрдХ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рд▓рдЧрддрд╛ рд╣реИ рдореБрдЭреЗ рд╕рдорд╕реНрдпрд╛ рдорд┐рд▓ рдЧрдИред
рдХреЛрдгреАрдп, рдиреНрдпреВрдирддрдо, рдЕрдзрд┐рдХрддрдо рдФрд░ рдХрджрдо рд╕реЗрдЯ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдорд╛рди рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдРрд╕рд╛ рд▓рдЧреЗ рдХрд┐ рд╕реАрдорд╛ рдЧрд▓рдд рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣реИред рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕ рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛

angular.module('angular-range', []).directive('range', function() {
    return {
        replace: true,
        restrict: 'E',
        scope: {
            value: '=ngModel',
            min: '=rangeMin',
            max: '=rangeMax',
            step: '=rangeStep',
        },
        template: '<input type="range"/>',
        link: function(scope, iElement, iAttrs) {
            scope.$watch('min', function() { setValue(); });
            scope.$watch('max', function() { setValue(); });
            scope.$watch('step', function() { setValue(); });
            scope.$watch('value', function() { setValue(); });

            function setValue() {
                if (
                    angular.isDefined(scope.min) &&
                    angular.isDefined(scope.max) &&
                    angular.isDefined(scope.step) &&
                    angular.isDefined(scope.value)
                ) {
                    iElement.attr("min", scope.min);
                    iElement.attr("max", scope.max);
                    iElement.attr("step", scope.step);
                    iElement.val(scope.value); 
                }
            }
            function read() {
                scope.value = iElement.val();
            }

            iElement.on('change', function() {
                scope.$apply(read);
            });
        }
    };
});

рдпрд╣рд╛рдБ рдирд┐рдЬреА рджрд╛рдпрд░реЗ рдХреЗ рдмрд┐рдирд╛ ngRange рдХрд╛ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рд╣реИ:

.module('ngRange', [])
.directive('ngRange', function() {
    return {
        replace: true,
        restrict: 'E',
        require: 'ngModel',
        template: '<input type="range"></input>',
        link: function(scope, element, attrs, ngModel) {
            var ngRangeMin;
            var ngRangeMax;
            var ngRangeStep;
            var value;

            if (!angular.isDefined(attrs.ngRangeMin)) {
                ngRangeMin = 0;
            } else {
                scope.$watch(attrs.ngRangeMin, function(newValue, oldValue, scope) {
                    if (angular.isDefined(newValue)) {
                        ngRangeMin = newValue;
                        setValue();
                    }
                });
            }
            if (!angular.isDefined(attrs.ngRangeMax)) {
                ngRangeMax = 100;
            } else {
                scope.$watch(attrs.ngRangeMax, function(newValue, oldValue, scope) {
                    if (angular.isDefined(newValue)) {
                        ngRangeMax = newValue;
                        setValue();
                    }
                });
            }
            if (!angular.isDefined(attrs.ngRangeStep)) {
                ngRangeStep = 1;
            } else {
                scope.$watch(attrs.ngRangeStep, function(newValue, oldValue, scope) {
                    if (angular.isDefined(newValue)) {
                        ngRangeStep = newValue;
                        setValue();
                    }
                });
            }
            if (!angular.isDefined(ngModel)) {
                value = 50;
            } else {
                scope.$watch(
                    function () {
                        return ngModel.$modelValue;
                    }, 
                    function(newValue, oldValue, scope) {
                        if (angular.isDefined(newValue)) {
                            value = newValue;
                            setValue();
                        }
                    }
                );
            }

            function setValue() {
                if (
                    angular.isDefined(ngRangeMin) &&
                    angular.isDefined(ngRangeMax) &&
                    angular.isDefined(ngRangeStep) &&
                    angular.isDefined(value)
                ) {
                    element.attr("min", ngRangeMin);
                    element.attr("max", ngRangeMax);
                    element.attr("step", ngRangeStep);
                    element.val(value); 
                }
            }

            function read() {
                if (angular.isDefined(ngModel)) {
                    ngModel.$setViewValue(value);
                }
            }

            element.on('change', function() {
                if (angular.isDefined(value) && (value != element.val())) {
                    value = element.val();
                    scope.$apply(read);
                }
            });
        }
    };
});

рдпрд╣ рдЕрднреА рднреА рдПрдХ рдореБрджреНрджрд╛ рд╣реИ, рд╣реИ рдирд╛?

http://plnkr.co/edit/MAT5KPkXyWblAJ71L8nK?p=hi

рд╣рд╛рдВ +1

рд╣рд╛рдБ, рдЕрднреА рднреА рдПрдХ рдореБрджреНрджрд╛ рд╣реИред

рдореИрдВрдиреЗ рд╕реНрдЯреИрдХрдУрд╡рд░рдлрд╝реНрд▓реЛ рдореЗрдВ рдХреБрдЫ рдЗрд╕реА рддрд░рд╣ рд╕реЗ рдкреВрдЫрд╛ рдХрд┐ 100 рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛрдиреЗ рдкрд░ рдПрдВрдЧреБрд▓рд░рдЬреЗрдПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЗрдирдкреБрдЯ [рд░реЗрдВрдЬ] рдХреЗ рдореВрд▓реНрдп рдХреЛ рдХреИрд╕реЗ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬрд╛рдП ред 1.4.0-beta.build.3791 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдпрд╣ рдмрдЧ рдЕрднреА рднреА рдореМрдЬреВрдж рд╣реИред

+1

+1, рдФрд░ рдпрд╣ рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рд╣реЛ рдЧрдпрд╛ рдЬрдм рдЗрдирдкреБрдЯ рд░реЗрдВрдЬ рдХреЛ рдЗрдирдкреБрдЯ рдирдВрдмрд░ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рд▓рд┐рдП +1

рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛: +1

рд╣рд╛рдВ - рд╡рд╣реА рд╕рдорд╕реНрдпрд╛ +1

рдпрд╣ рдореВрд▓ html5 рд╣реИ - рдЗрд╕ рдкрд░ рдХреНрдпрд╛ рд╕реНрдерд┐рддрд┐ рд╣реИ, рдХреНрдпрд╛ рдХреЛрдИ рдЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ?

рдЗрд╕реЗ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП: https://github.com/danielcrisp/angular-rangeslider/issues/51
рдЬрд╣рд╛рдБ рддреНрд░реБрдЯрд┐: ngModel: numfmt рд░реЗрдВрдЬ рд╕реНрд▓рд╛рдЗрдбрд░ рдлреЗрдВрдХрд╛ рдЧрдпрд╛ рд╣реИ
рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП @ ardf69 рд╕рдорд╛рдзрд╛рди рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛:

angular.module('common').directive('rangeSlider', [function () {
    return {
        replace: true,
        restrict: 'E',
        require: 'ngModel',
        template: '<input type="range"/>',
        link: function (scope, element, attrs, ngModel) {
            var ngRangeMin;
            var ngRangeMax;
            var ngRangeStep;
            var value;

            function init() {
                if (!angular.isDefined(attrs.ngRangeMin)) {
                    ngRangeMin = 0;
                } else {
                    scope.$watch(attrs.ngRangeMin, function (newValue, oldValue, scope) {
                        if (angular.isDefined(newValue)) {
                            ngRangeMin = newValue;
                            setValue();
                        }
                    });
                }
                if (!angular.isDefined(attrs.ngRangeMax)) {
                    ngRangeMax = 100;
                } else {
                    scope.$watch(attrs.ngRangeMax, function (newValue, oldValue, scope) {
                        if (angular.isDefined(newValue)) {
                            ngRangeMax = newValue;
                            setValue();
                        }
                    });
                }
                if (!angular.isDefined(attrs.ngRangeStep)) {
                    ngRangeStep = 1;
                } else {
                    scope.$watch(attrs.ngRangeStep, function (newValue, oldValue, scope) {
                        if (angular.isDefined(newValue)) {
                            ngRangeStep = newValue;
                            setValue();
                        }
                    });
                }
                if (!angular.isDefined(ngModel)) {
                    value = 50;
                } else {
                    scope.$watch(
                        function () {
                            return ngModel.$modelValue;
                        },
                        function (newValue, oldValue, scope) {
                            if (angular.isDefined(newValue)) {
                                value = newValue;
                                setValue();
                            }
                        }
                    );
                }

                if (!ngModel) {
                    return;
                }
                ngModel.$parsers.push(function (value) {
                    var val = Number(value);
                    if (val !== val) {
                        val = undefined;
                    }
                    return val;
                });
            }

            function setValue() {
                if (
                    angular.isDefined(ngRangeMin) &&
                    angular.isDefined(ngRangeMax) &&
                    angular.isDefined(ngRangeStep) &&
                    angular.isDefined(value)
                    ) {
                    element.attr("min", ngRangeMin);
                    element.attr("max", ngRangeMax);
                    element.attr("step", ngRangeStep);
                    element.val(value);
                }
            }

            function read() {
                if (angular.isDefined(ngModel)) {
                    ngModel.$setViewValue(value);
                }
            }

            element.on('change', function () {
                if (angular.isDefined(value) && (value != element.val())) {
                    value = element.val();
                    scope.$apply(read);
                }
            });

            init();
        }
    };
}
]);

+1, рдореБрдЭреЗ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ рдЬрдм рдПрдирдЬреА-рдЗрдл рдХреЗ рд╕рд╛рде [рдЗрдирдкреБрдЯ рдкреНрд░рдХрд╛рд░ = рд╢реНрд░реЗрдгреА] рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛

рдореИрдВ рднреА рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛, рдФрд░ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╕реНрдЯреИрдХ рдУрд╡рд░рдлреНрд▓реЛ рдкреНрд░рд╢реНрди рд▓рд┐рдЦрд╛, "рдХреЛрдгреАрдп рдореЗрдВ, рд╕реНрдХреЛрдк рд╡реЗрд░рд┐рдПрдмрд▓ _before_ ngModel рд╕реЗ bind рд╡рд┐рд╢реЗрд╖рддрд╛ рдЗрдирдкреБрдЯ рдХреЗ value рдмрд╛рдВрдзрддрд╛ рд╣реИ" ред рдкреНрд░рд╢реНрди рдореЗрдВ рдПрдХ рд░рди рдХреЛрдбреЗрдмрд▓ рд╕реНрдирд┐рдкреЗрдЯ рд╢рд╛рдорд┐рд▓ рд╣реИ рдЬреЛ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреБрди: рдкреЗрд╢ рдХрд░рддрд╛ рд╣реИред

рдХреБрдЫ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдбреНрд╕ рдХреЛ рд╕реНрдЯреИрдХ рдУрд╡рд░рдлреНрд▓реЛ рдкрд░ рдЙрддреНрддрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдореЗрдВ min , max рдХрд╛ рдорд╛рди рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП $inputElement.prop() рд╕рд╛рде DOM рд╣реЗрд░рдлреЗрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ, рдФрд░ step (рдЬреЛ рднреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдЖрд╡рд╢реНрдпрдХ рд╣реИрдВ)ред рдореЗрд░реЗ рдХрд╕реНрдЯрдо рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд <input> value рдкреНрд░рдердо рд╕реЗрдЯ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ DOM рд╣реЗрд░рдлреЗрд░ рдХрд░рдиреЗ рд╕реЗ, рдореИрдВ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдмрдЪрддрд╛ рд╣реВрдВред

рдЗрд╕ рдмрдЧ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдореЗрд░рд╛ рдЖрд▓рд╕реА рддрд░реАрдХрд╛ рд╢реВрдиреНрдп / рдЕрдзрд┐рдХрддрдо рдФрд░ рдЪрд░рдг рдорд╛рдиреЛрдВ рдХреЛ 100 рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдирд╛ рдерд╛ред рдЗрд╕рд▓рд┐рдП 300 3.0 рд╣реЛ рдЧрдпрд╛, рдЖрджрд┐ рдФрд░ рдореВрд▓реНрдп 100 рд╕реЗ рдиреАрдЪреЗ рд╣реЛ рдЧрдПред рдлрд┐рд░ рдореИрдВ рдЪреАрдЬреЛрдВ рдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛рдиреБрд╕рд╛рд░ рд╡рд╛рдкрд╕ рдЧреБрдгрд╛ рдХрд░рддрд╛ рд╣реВрдВред рд╢рд╛рдпрдж рдпрд╣ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИред

+1 рдпрд╣ рдмрд╣реБрдд рдХрд╖реНрдЯрдкреНрд░рдж рд╣реИред

+1

+1

+1

рдПрдХ рдФрд░ рдЖрд▓рд╕реА рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рд╣реИрдХ:

      $timeout(function () {
        angular.element('.slider-input').val(amount);
      });

+1

GitHub рдХреА рдирдИ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд╕рд╛рде, рдЖрдкрдХреЛ рдЕрдм "+1" рдЯрд┐рдкреНрдкрдгреА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдЖрдк рдЗрд╕ рдореБрджреНрджреЗ рдореЗрдВ рдкрд╣рд▓реА рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд╢реАрд░реНрд╖-рджрд╛рдИрдВ рдУрд░ "+: рдореБрд╕реНрдХрд╛рди:" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рдЕрдкрдиреА рд░реБрдЪрд┐ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдлрд┐рд░ рдЪреБрдиреЗрдВ: +1: ("+1")ред рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдХреЛ рдПрдХ рдмреЗрдХрд╛рд░ рд╕реВрдЪрдирд╛ рднреЗрдЬрдиреЗ рд╕реЗ рдмрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдореИрдВрдиреЗ рдПрдирдЬреА-рдореЙрдбрд▓ рдХреЛ рд╣рдЯрд╛рдХрд░ рдСрдирдбреНрд░реИрдЧ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛ рд╣реИред
рдЗрд╕ http://codepen.io/nagarajumusini/pen/BKpGJz рдХреЛ рджреЗрдЦреЗрдВ

+1

+1

рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдореВрд▓реНрдп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП рдПрдирдЬреА-рдЗрдирд┐рдЯ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ

<input type="range" class="slider-years" min="0" max="30" step="1" value="0" data-ng-model="metier.anneeExperience" data-ng-init="metier.anneeExperience ? metier.anneeExperience = metier.anneeExperience : metier.anneeExperience = 0" />

рдЗрд╕рдореЗрдВ рд╣рд▓ рдорд┐рд▓рд╛:

http://jsfiddle.net/jestho/8dymV/7/

рд╣рдо рдЗрд╕ рдкрд░ (рдЖрдЦрд┐рд░рдХрд╛рд░) рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВред Https://github.com/angular/angular.js/issues/5892 рдХреЗ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдмрдВрдж рдХрд░рдирд╛

$ (рджрд╕реНрддрд╛рд╡реЗрдЬрд╝)ред
angular.element ('ред yourclasshere')ред val (valueoftheslideronload);
};

рдпрд╣ jQuery рдХрд╛ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рдЖрдк рдкреЗрдЬ рд▓реЛрдб рд╣реЛрдиреЗ рдкрд░ рдПрдХ рдорд╛рди рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рд╕реНрд▓рд╛рдЗрдбрд░ рдХрд╛ рдЬреЛ рднреА рдореВрд▓реНрдп рд╣реИ рд╡рд╣ рддрдм рддрдХ рд╕рд┐рдВрдХ рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рдЬрдм рддрдХ рдХрд┐ рдЗрд╕реЗ рдЫреБрдЖ рди рдЬрд╛рдПред

@davedx рд╢рд╛рдпрдж рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдпрд╣ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╣реИред

<input type="range" min="15" data-ng-init="signup.age=30" value="30" max="85" step="1" name="ageInput" class="form-control input-lg" ng-model="signup.age" oninput="ageOutputId.value = ageInput.value" /> <output name="ageOutputName" id="ageOutputId">30</output>

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

ashclarke picture ashclarke  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

cmplank picture cmplank  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

WesleyKapow picture WesleyKapow  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

nosideeffects picture nosideeffects  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

butchpeters picture butchpeters  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ