2016-03-27 3 views
1

siteDatePicker.html:alle Termine auf Last des Kalenders deaktivieren und ein bestimmtes Datum in AngularJS (nur Datumsauswahl und nicht Datetime) ermöglichen

 <html> 
      <head> 
      <title>Typehead</title> 
      <meta charset="UTF-8"> 
      <meta name="viewport" content="width=device-width, initial-scale=1"> 
      <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" /> 
      <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.0-rc.2/angular.js"></script> 
      <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.0-rc.2/angular-animate.js"></script> 
      <script src="https://cdnjs.cloudflare.com/ajax/libs/angular-ui-bootstrap/1.1.2/ui-bootstrap-tpls.min.js"></script> 
      <script src="./siteDatePicker.js"></script> 

       <style> 
       .full button span { 
       background-color: limegreen; 
       border-radius: 32px; 
       color: black; 
       } 
       .partially button span { 
       background-color: orange; 
       border-radius: 32px; 
       color: black; 
       } 
       .appointment>button { 
       color: white; 
       background-color: red; 
       } 

      </style> 

      </head> 
      <body ng-app="ui.bootstrap.demo" > 

      <div ng-controller="DatepickerDemoCtrl"> 
       <pre>Selected date is: <em>{{dt | date:'fullDate' }}</em></pre> 

       <h4>Popup</h4> 
       <div class="row"> 
       <div class="col-md-6"> 
        <p class="input-group"> 
        <input type="text" class="form-control" uib-datepicker-popup="{{format}}" ng-model="dt" ng-change="dateSelected()"is-open="popup1.opened" datepicker-options="dateOptions" ng-required="true" close-text="Close" alt-input-formats="altInputFormats" date-disabled="disabled(date, mode)" custom-class="dayClass(date, mode)" /> 
        <span class="input-group-btn"> 
         <button type="button" class="btn btn-default" ng-click="open1()"><i class="glyphicon glyphicon-calendar"></i></button> 
        </span> 
        </p> 
       </div> 
       </div> 
      </div> 
      </body> 
     </html> 

siteDatePicker.js:

 var myApp= angular.module('ui.bootstrap.demo', ['ngAnimate', 'ui.bootstrap', 'ui.bootstrap.dateparser', 'ui.bootstrap.datepicker']); 



        myApp.controller('DatepickerDemoCtrl', function($scope, $http) { 


     $scope.holidays=[]; 
        $scope.today = function() { 
         $scope.dt = new Date(); 
         }; 
         $scope.today(); 

         $scope.clear = function() { 
         $scope.dt = null; 
         }; 

         $scope.inlineOptions = { 
         minDate: new Date(), 
         showWeeks: false 
         }; 

         $scope.dateOptions = { 
          formatYear: 'yy', 
          maxDate: new Date(2020, 5, 22), 
          minDate: new Date(), 
          startingDay: 1 
         }; 

         // Disable weekend selection 
         function disabledasda(data) { 
          var date = data.date, 
          mode = data.mode; 
          return mode === 'day' && (date.getDay() === 0 || date.getDay() === 6); 
         } 

         $scope.toggleMin = function() { 
         $scope.inlineOptions.minDate = $scope.inlineOptions.minDate ? null : new Date(); 
         $scope.dateOptions.minDate = $scope.inlineOptions.minDate; 
         }; 

         $scope.toggleMin(); 

         $scope.open1 = function() { 
         $scope.popup1.opened = true; 
         }; 


         $scope.setDate = function(year, month, day) { 
         $scope.dt = new Date(year, month, day); 
         }; 

         $scope.formats = ['dd-MMMM-yyyy', 'yyyy/MM/dd', 'dd.MM.yyyy', 'shortDate']; 
         $scope.format = $scope.formats[0]; 
         $scope.altInputFormats = ['M!/d!/yyyy']; 

         $scope.popup1 = { 
         opened: false 
         }; 


         var tomorrow = new Date(); 
         tomorrow.setDate(tomorrow.getDate() + 1); 
         var afterTomorrow = new Date(); 
         afterTomorrow.setDate(tomorrow.getDate() + 1); 
         $scope.events = [ 
         { 
          date: tomorrow, 
          status: 'full' 
         }, 
         { 
          date: afterTomorrow, 
          status: 'partially' 
         } 
         ]; 
         $scope.disabled = function(date, mode){ 

         $scope.holidays = [ 
          new Date(2016,2,14), 
          new Date(2016,2,15), 
          new Date(2016,2,16), 
         ] 

         var isHoliday = false; 
         for(var i = 0; i < $scope.holidays.length ; i++) { 
          if(areDatesEqual($scope.holidays[i], date)){ 
          isHoliday = true; 
          } 
         } 

         return (mode === 'day' && isHoliday); 
         }; 

         function areDatesEqual(date1, date2) { 

         return date1.setHours(0,0,0,0) === date2.setHours(0,0,0,0) 

         } 

         $scope.dayClass = function(date, mode) { 

        var appointments = [ 
         new Date(2016,2,3), 
         new Date(2016,2,8), 
         new Date(2016,2,22), 
        ] 

        if (mode === 'day') { 

         var dateToCheck = new Date(date); 

         for(var i = 0; i < appointments.length ; i++) { 
         if(areDatesEqual(appointments[i], dateToCheck)){ 
          return 'appointment'; 
         } 
         } 
        } 
        return ''; 
        }; 

        $scope.dateSelected = function(){ 

      var appointments = [ 
       new Date(2016,2,3), 
       new Date(2016,2,8), 
       new Date(2016,2,22), 
      ]; 

      var dateSelected = new Date($scope.dt); 

      for(var i = 0; i < appointments.length ; i++) { 
       if(areDatesEqual(appointments[i], dateSelected)){ 
       performAction(); 
       } 
      } 

      }; 

      function performAction(){ 
      alert("Appointment date selected"); 
      $scope.holidays.push(new Date(2016,2,14)); 

         $scope.disabled(date,mode); 
      } 



        }); 

über das, was i versucht ... Ich habe versucht, neue Daten in Urlaub Array, wo Termine sind deaktiviert ... ist es in der performaction-Funktion durchgeführt .....

erstens möchte ich den Kalender mit allen Daten deaktiviert zunächst laden und dann muss ich in der Lage sein, bestimmte Daten meiner Wahl zu aktivieren ....

zweitens, nachdem der Kalender geladen wurde und die spezifischen Daten aktiviert wurden, möchte ich mehr Daten auf einen der aktivierten Daten aktivieren .

Beispiel: alle Termine deaktiviert sind, wenn Kalender geladen wird 27-03-2016 aktiviert, wenn Kalender auf Klick auf 27-03-2016 geladen wird, ermöglicht es 28-03-2016

Bitte beachten : ich möchte ALLE DATEN deaktivieren und dateinpicker nicht deaktivieren.

jede Hilfe wäre willkommen!

+0

@sergio Marron! –

+0

getan .... jede Person, die auf dieser Seite landet, verwenden Sie den folgenden Link: http://www.dotnetlearners.com/blogs/view/206/Disable-future-dates-in-AngularJS-UI-bootstrap-datepicker .aspx setzt jetzt maxdate und mindate, indem es das heutige Datum übergibt ... und Code, um das spezifische Datum zu deaktivieren, ist oben in meiner Frage ... Sie können das aktuelle damit deaktivieren ... erledigt! aber jetzt möchte ich bestimmte Daten aktivieren .... –

Antwort

1

hier ist die vollständige Antwort für Bedürftige: (id wie @Sergio Marron für all seine Hilfe danken)

siteDatePicker.js:

 var myApp= angular.module('ui.bootstrap.demo', ['ngAnimate', 'ui.bootstrap', 'ui.bootstrap.dateparser', 'ui.bootstrap.datepicker']); 



       myApp.controller('DatepickerDemoCtrl', function($scope, $http) { 

       $scope.today = function() { 
        $scope.dt = new Date(); 
        }; 
        $scope.today(); 

        $scope.clear = function() { 
        $scope.dt = null; 
        }; 

        $scope.inlineOptions = { 
        minDate: new Date(), 
        showWeeks: false 
        }; 

        $scope.dateOptions = { 
         formatYear: 'yy', 
         maxDate: new Date(2020, 5, 22), 
         minDate: new Date(), 
         startingDay: 1 
        }; 

        // Disable weekend selection 
        function disabledasda(data) { 
         var date = data.date, 
         mode = data.mode; 
         return mode === 'day' && (date.getDay() === 0 || date.getDay() === 6); 
        } 

        $scope.toggleMin = function() { 
        $scope.inlineOptions.minDate = $scope.inlineOptions.minDate ? null : new Date(); 
        $scope.dateOptions.minDate = $scope.inlineOptions.minDate; 
        }; 

        $scope.toggleMin(); 

        $scope.open1 = function() { 
        $scope.popup1.opened = true; 
        }; 


        $scope.setDate = function(year, month, day) { 
        $scope.dt = new Date(year, month, day); 
        }; 

        $scope.formats = ['dd-MMMM-yyyy', 'yyyy/MM/dd', 'dd.MM.yyyy', 'shortDate']; 
        $scope.format = $scope.formats[0]; 
        $scope.altInputFormats = ['M!/d!/yyyy']; 

        $scope.popup1 = { 
        opened: false 
        }; 


        var tomorrow = new Date(); 
        tomorrow.setDate(tomorrow.getDate() + 1); 
        var afterTomorrow = new Date(); 
        afterTomorrow.setDate(tomorrow.getDate() + 1); 
        $scope.events = [ 
        { 
         date: tomorrow, 
         status: 'full' 
        }, 
        { 
         date: afterTomorrow, 
         status: 'partially' 
        } 
        ]; 
        $scope.disabled = function(date, mode){ 

        $scope.holidays = [ 
         new Date(2016,2,14), 
         new Date(2016,2,15), 
         new Date(2016,2,16), 
         new Date() 
        ] 

        var isHoliday = false; 
        for(var i = 0; i < $scope.holidays.length ; i++) { 
         if(areDatesEqual($scope.holidays[i], date)){ 
         isHoliday = true; 
         } 
        } 

        return (mode === 'day' && isHoliday); 
        }; 

        function areDatesEqual(date1, date2) { 

        return date1.setHours(0,0,0,0) === date2.setHours(0,0,0,0) 

        } 

        $scope.dayClass = function(date, mode) { 

       var appointments = [ 
        new Date(2016,2,3), 
        new Date(2016,2,8), 
        new Date(2016,2,22), 
       ] 

       if (mode === 'day') { 

        var dateToCheck = new Date(date); 

        for(var i = 0; i < appointments.length ; i++) { 
        if(areDatesEqual(appointments[i], dateToCheck)){ 
         return 'appointment'; 
        } 
        } 
       } 
       return ''; 
       }; 

       $scope.dateSelected = function(){ 

     var appointments = [ 
      new Date(2016,2,3), 
      new Date(2016,2,8), 
      new Date(2016,2,22), 
     ]; 

     var dateSelected = new Date($scope.dt); 

     for(var i = 0; i < appointments.length ; i++) { 
      if(areDatesEqual(appointments[i], dateSelected)){ 
      performAction(); 
      } 
     } 

     }; 

     function performAction(){ 
     alert("Appointment date selected"); 
     } 


    $scope.dtmax = new Date(); 
       }); 

siteDatepicker.html:

 <html> 
      <head> 
      <title>Typehead</title> 
      <meta charset="UTF-8"> 
      <meta name="viewport" content="width=device-width, initial-scale=1"> 
      <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" /> 
      <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.0-rc.2/angular.js"></script> 
      <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.0-rc.2/angular-animate.js"></script> 
      <script src="https://cdnjs.cloudflare.com/ajax/libs/angular-ui-bootstrap/1.1.2/ui-bootstrap-tpls.min.js"></script> 
      <script src="./siteDatePicker.js"></script> 

       <style> 
       .full button span { 
       background-color: limegreen; 
       border-radius: 32px; 
       color: black; 
       } 
       .partially button span { 
       background-color: orange; 
       border-radius: 32px; 
       color: black; 
       } 
       .appointment>button { 
       color: white; 
       background-color: red; 
       } 

      </style> 

      </head> 
      <body ng-app="ui.bootstrap.demo" > 

      <div ng-controller="DatepickerDemoCtrl"> 
       <pre>Selected date is: <em>{{dt | date:'fullDate' }}</em></pre> 

       <h4>Popup</h4> 
       <div class="row"> 
       <div class="col-md-6"> 
        <p class="input-group"> 
        <input type="text" class="form-control" uib-datepicker-popup="{{format}}" ng-model="dt" ng-change="dateSelected()"is-open="popup1.opened" datepicker-options="dateOptions" ng-required="true" close-text="Close" alt-input-formats="altInputFormats" date-disabled="disabled(date, mode)" custom-class="dayClass(date, mode)" max-date="dtmax" min-date="dtmax"/> 
        <span class="input-group-btn"> 
         <button type="button" class="btn btn-default" ng-click="open1()"><i class="glyphicon glyphicon-calendar"></i></button> 
        </span> 
        </p> 
       </div> 
       </div> 
      </div> 
      </body> 
     </html> 

an alle helfenden Hände ... danke! besondere Erwähnung an Avesh Naik und Nazeef Shaikh!

+0

Ich habe gerade versucht, Ihren Code zu implementieren, aber es funktioniert nicht, ich bin nicht in der Lage, die Termine zu wählen. Bitte geben Sie an, wenn etwas fehlt. –

Verwandte Themen