如何让两个滑块以相反的方式移动[AngularJS]

时间:2015-08-22 14:42:08

标签: angularjs

我在angularJS应用程序中有两个滑块,底面为0,ceil为100.两个值都从50开始

我希望他们以相反的方式移动,因此两个滑块的总和值应为100

例如,如果第一个滑块移动到60,则第二个滑块将返回到40

我的HTML代码:

 <table class="table">
        <tr>
            <td><label>first slider
            </label>
                   <rzslider rz-slider-model="priceSlider3"
                rz-slider-floor="0"
                rz-slider-ceil="100"
                rz-slider-always-show-bar="true"
                ></rzslider>
            </td>
        </tr>
        <tr>
            <td><label>second slider
            </label>
                   <rzslider rz-slider-model="100 - priceSlider3"
                rz-slider-floor="0"
                rz-slider-ceil="100"
                rz-slider-always-show-bar="true"
                ></rzslider>
                </td>
        </tr>
</table> 

控制器内部:

$scope.priceSlider3 = 50;

我使用的解决方案是将第二个滑块数据模型设置为100 - priceSlider3

但是,如果第二个滑块发生变化,则第一个滑块发生变化,它仅适用于第一个滑块更改。

任何适合两者的解决方案?

2 个答案:

答案 0 :(得分:1)

您可以尝试为每个滑块设置不同的模型并观察其中的更改

// first slider value
$scope.priceSlider3 = 50;

// second slider value
$scope.priceSlider4 = 50;

$scope.$watch('priceSlider3', function(val) {
    $scope.priceSlider4 = 100 - val;
});

$scope.$watch('priceSlider4', function(val) {
    $scope.priceSlider3 = 100 - val;
});

然后,绑定新模型

<table class="table">
        <tr>
            <td><label>first slider
            </label>
                   <rzslider rz-slider-model="priceSlider3"
                rz-slider-floor="0"
                rz-slider-ceil="100"
                rz-slider-always-show-bar="true"
                ></rzslider>
            </td>
        </tr>
        <tr>
            <td><label>second slider
            </label>
                   <rzslider rz-slider-model="priceSlider4"
                rz-slider-floor="0"
                rz-slider-ceil="100"
                rz-slider-always-show-bar="true"
                ></rzslider>
                </td>
        </tr>
</table> 

答案 1 :(得分:0)

Angular 2中使用材料的相同功能:

组件模板:slider.compoment.html

<mat-slider [(ngModel)]="sliderOne" 
            [ngModelOptions]="{standalone: true}" 
            (change)="changeValueSliderOne($event.value)">
</mat-slider>
<input type="number" [(ngModel)]="sliderOne" />

<mat-slider [(ngModel)]="sliderTwo" 
            [ngModelOptions]="{standalone: true}" 
            (change)="changeValueSliderTwo($event.value)">
</mat-slider>
<input type="number" [(ngModel)]="sliderTwo"/>

组件打字稿:slider.component.ts

export class SliderComponent {
    sliderOne: number;
    sliderTwo: number;

    // ... 

    public changeValueSliderOne(value) {
        this.sliderOne = value;
        this.sliderTwo = 100 - value;
    }

    public changeValueSliderTwo(value) {
        this.sliderTwo = value;
        this.sliderOne = 100 - value;
    }
}