2014-12-30 2 views
0

현재 시간을 선택할 수있는 시간과 분 선택기가 있습니다. 시작 시간을 선택하면 시간 옵션이 자동으로 업데이트되므로 시간에서보다 작은 시간을 선택할 수 없습니다.처음 Angularjs는 드롭 다운에서 마지막 항목을 선택할 수 없습니다.

나는 정말로 나를 괴롭히는 것을 발견했습니다. 내 드롭 다운에서 마지막 옵션을 선택할 때마다 처음에는 아무 일도 일어나지 않습니다. 다시 선택하면 선택됩니다. 다른 옵션을 선택하면 처음에는 모든 것이 잘 작동합니다. HTML에서 볼 수 있습니까? 값은 숫자로 설정됩니다. 첫 번째 옵션은 마지막 옵션을 선택하는 것입니다. 이것은 내 지시어입니다

<div hour-and-minute-range-selector selected-from="spotFrom" selected-from-minute="spotFromMinute" selected-to="spotTo" selected-to-minute="spotToMinute" from-min-hour="0" from-max-hour="23" to-min- hour="0" to-max-hour="24"></div> 

:

내 HTML입니다

//Default behaviour is minute steps of 15 minutes (quarters) 
app.directive('hourAndMinuteRangeSelector', function() { 
    return { 
     restrict: 'A', 
     templateUrl: 'directiveTemplates/hourAndMinuteRangeTemplate.html', 
     scope: { 
      selectedFrom: '=', 
      selectedTo: '=', 
      selectedFromMinute: '=', 
      selectedToMinute: '=', 
      fromMaxHour: '@', 
      fromMinHour: '@', 
      toMaxHour: '@', 
      toMinHour: '@', 
      fromMaxMinute: '@', 
      fromMinMinute: '@', 
      toMaxMinute: '@', 
      toMinMinute: '@', 
      minuteStep: '@' 
     }, 
     link: function (scope, elem, attrs) { 
      scope.fromHours = []; 
      scope.fromMinutes = []; 
      scope.toHours = []; 
      scope.toMinutes = []; 
      if (!scope.fromMaxHour) { 
       scope.fromMaxHour = 24; 
      } 
      if (!scope.toMaxHour) { 
       scope.toMaxHour = 24; 
      } 
      if (!scope.fromMinHour) { 
       scope.fromMinHour = 0; 
      } 
      if (!scope.toMinHour) { 
       scope.toMinHour = 0; 
      } 
      if (!scope.fromMaxMinute) { 
       scope.fromMaxMinute = 59; 
      } 
      if (!scope.toMaxMinute) { 
       scope.toMaxMinute = 59; 
      } 
      if (!scope.fromMinMinute) { 
       scope.fromMinMinute = 0; 
      } 
      if (!scope.toMinMinute) { 
       scope.toMinMinute = 0; 
      } 
      if (!scope.minuteStep) { 
       scope.minuteStep = 15; //Default to quarters 
      } 

      for (var i = scope.fromMinHour; i <= scope.fromMaxHour; i++) { 
       scope.fromHours.push(i); 
      } 
      for (var h = scope.toMinHour; h <= scope.toMaxHour; h++) { 
       scope.toHours.push(h); 
      } 
      for (var j = scope.fromMinMinute; j <= scope.fromMaxMinute; j = j + scope.minuteStep) { 
       scope.fromMinutes.push(j); 
      } 
      for (var k = scope.toMinMinute; k <= scope.toMaxMinute; k = k + scope.minuteStep) { 
       scope.toMinutes.push(k); 
      } 

      scope.$watch('selectedFrom', function (newVal, oldVal) { 
       if (newVal != oldVal) { 
        //If the last minute step has been selected, then the toHour must be higher than the from 
        if (scope.selectedFromMinute == _.last(scope.fromMinutes)) { 
         scope.toMinHour = scope.selectedFrom + 1; 
        } else { 
         scope.toMinHour = scope.selectedFrom; 
        } 

        if (scope.selectedTo < scope.toMinHour) { 
         scope.selectedTo = null; 
        } 
        scope.toHours = []; 
        for (i = scope.toMinHour; i <= scope.toMaxHour; i++) { 
         scope.toHours.push(i); 
        } 
       } 
      }); 

      scope.$watch('selectedFromMinute', function (newVal, oldVal) { 
       if (newVal != oldVal && scope.selectedFrom) { 
        //If the last minute step has been selected, then the toHour must be higher than the from 
        if (scope.selectedFromMinute == _.last(scope.fromMinutes) && 
         scope.selectedFrom == scope.selectedTo) { 
         scope.toMinHour = scope.selectedFrom + 1; 
        } else { 
         scope.toMinHour = scope.selectedFrom; 
        } 

        if (scope.selectedTo < scope.toMinHour) { 
         scope.selectedTo = null; 
        } 
        scope.toHours = []; 
        for (i = scope.toMinHour; i <= scope.toMaxHour; i++) { 
         scope.toHours.push(i); 
        } 
       } 
      }); 

     } 
    }; 
}); 

그리고 이것은 템플릿입니다 :

<div class="input-group input-group-sm form-inline"> 
<select class="form-control" ng-options="hour|timeformat for hour in fromHours" ng-model="selectedFrom" style="height: 30px;"></select> 
<span class="input-group-addon" style="border-left: 0; border-right: 0; height: 30px;">-</span> 
<select class="form-control" ng-options="minute|timeformat for minute in fromMinutes" ng-model="selectedFromMinute" style="height: 30px;"></select> 
</div> 
<div class="input-group input-group-sm form-inline"> 
<select class="form-control" ng-options="hour|timeformat for hour in toHours" ng-model="selectedTo" style="height: 30px;"></select> 
<span class="input-group-addon" style="border-left: 0; border-right: 0; height: 30px;">-</span> 
<select class="form-control" ng-options="minute|timeformat for minute in toMinutes" ng-model="selectedToMinute" style="height: 30px;"></select> 
</div> 

내가 차라리 새로 온 것을 고백해야 Angularjs에, 그래서 나는 명백한 실수를 한 것일 수도 있습니다 - 나는 그들을 볼 수 없습니다. 나는 예. 내가 지시문에 선택적 구성 매개 변수를 만든 방식에 대해서는 상당히 불확실하지만, 제거하거나 변경하면 내 문제에 도움이되지 않는 것 같습니까? 대신에 @. 이 AngularJS와 1.26에 도입 된 오류가 것 같다 http://plnkr.co/edit/9JOoj8sV21slvSU7hBiH?p=preview

답변

0

-

나는이 어떻게 든 AngularJS와 1.25와 1.26 사이에 도입되는 것을 보여줍니다 간단한 plkr을했습니다. 여기에 버그 보고서가 있습니다. https://github.com/angular/angular.js/issues/10161

해결 방법을 찾지 못했기 때문에 제 경우에는 각도 팀이이 문제가 해결 된 새 버전을 출시하기를 기다려야합니다.

관련 문제