AngularJS - 2选择了一系列年份。第二个选项必须大于或等于所选的第一个选项

时间:2015-02-20 10:48:37

标签: angularjs angularjs-filter angularjs-watch

我有2个选择我需要选择的年份范围。第二次选择的年份必须大于或等于第一次选择的年份。因此,如果我在第一个选择中选择一年,则第二个选择应该更改并显示大于或等于第一个选择中所选年份的年份。

这就是我现在所拥有的:

<div ng-app="">
    <div ng-controller="appCtrl">
        <select  id="id_year_1">
            <option ng-repeat="year in years1 | filter:dateRangeFilter1" value="{{year}}">{{year}}</option>
        </select>
        <select  id="id_year_2">
            <option ng-repeat="year in years2 | filter:dateRangeFilter2" value="{{year}}">{{year}}</option>
        </select>    
    </div>
</div>


angular.module('app', ['ngResource'])

function appCtrl($scope) {
    var years = [2010, 2011, 2012];
    $scope.years1 = years;
    $scope.years2 = years;
    $scope.year1 = years[0];
    $scope.year2 = years[years.length - 1];

    $scope.$watch('years1', function(value, oldValue) {
        $scope.dateRangeFilter2 = function (value) {
            return value >= $scope.year2;
        };
    });
    $scope.$watch('years2', function(value, oldValue) {
        $scope.dateRangeFilter1 = function (value) {
            return value <= $scope.year1;
        };
    });
}

我也有这个小提琴:http://jsfiddle.net/d3sb4hky/

感谢。

2 个答案:

答案 0 :(得分:1)

我减少了一些代码(jsfiddle)。我确定它不是完美的但是使用方式,但它是你要求的。也许您可以在第一个选择中使用ng-change来更新secondSelect? ($watch被高估了!)

<div ng-app="">
<div ng-controller="appCtrl">
    <select ng-model="firstSelect" >
        <option ng-repeat="year in years" value="{{year}}">{{year}}</option>
    </select>
    <select ng-model="secondSelect">
        <option ng-if="year >= firstSelect" ng-repeat="year in years" value="{{year}}">
            {{year}}
        </option>
    </select>    
</div>
</div>

// Script
angular.module('app', ['ngResource'])
function appCtrl($scope) {
    $scope.years = [2010, 2011, 2012];
}

答案 1 :(得分:0)

如果您有多年的阵容,那么您就不需要编写手动监视了。您可以直接使用自定义过滤器,如下所示:

function appCtrl($scope) {
    var years = [2010, 2011, 2012];
    $scope.years1 = years;
    $scope.years2 = years;

    $scope.yr1Val = years[0];

    $scope.yearFilter = function(yr) {
        if(yr>$scope.yr1Val)
            return true;
        return false;
    }
}

查看更新的Fiddle