2015-03-09 2 views
0

может кто-нибудь объяснить мне, почему моя кнопка Add Trip 1 работает, когда я ввожу действительную дату (ГГГГ-ММ-ДД), но если я использую свою кнопку Add Trip 2, которая вызывает точно такую ​​же функцию, значение даты не отправляется! Функция создает пустой объект? «Startdatum» пуст, даже не создан ...AngularJS - Datepicker не работает?

В моих глазах оба должны делать то же самое! Где моя ошибка?

благодаря

Plnkr

index.html

<body ng-controller="TripController"> 
    <div class="row" style="margin-top: 50px;"> 
     <div class="col-md-10 col-md-offset-1"> 
     <div class="row"> 
      <div class="col-xs-6 col-md-6"> 
      <form name="addTrip" ng-submit="addTrip()"> 
       <input ng-model="newTrip" type="text" name="newTrip" required="" placeholder="YYYY-MM-DD" /> 
       <button ng-disabled="addTrip.$invalid">Add Trip 1</button> 
      </form> 
      </div> 
      <div class="col-xs-6 col-md-6"> 
      <button ng-click="save()" class="btn btn-primary">Save to JSON</button> 
      <h4 ng-show="savedJSON">Saved JSON</h4> 
      <pre ng-show="savedJSON">{{savedJSON}}</pre> 
      </div> 
     </div> 
     <br /> 
     <select ng-model="Startdate"> 
      <option value="" selected="selected">Alle</option> 
      <option ng-repeat="option in options" value="{{option.value}}">{{option.label}}</option> 
     </select> 
     <br /> 
     <br/> 
     <form name="addTrip" ng-submit="addTrip()"> 

     <div ng-controller="DatepickerDemoCtrl"> 
        <p class="input-group"> 
        <input type="text" class="form-control" datepicker-popup="{{format}}" ng-model="newTrip" is-open="opened" datepicker-options="dateOptions" date-disabled="" ng-required="true" close-text="Close" /> 
        <span class="input-group-btn"> 
         <button type="button" class="btn btn-default" ng-click="open($event)"> 
         <i class="glyphicon glyphicon-calendar"></i> 
         </button> 
        </span> 
        </p> 
       </div> 
     <button ng-disabled="addTrip.$invalid">Add Trip 2</button> 
     </form> 

     <br/><br/><br/><br/><br/> 
     <div class="box" ng-repeat="trip in trips | filter:Startdate"> 
      <button type="button" ng-click="deleteTrip($index)" class="close" aria-label="Close"> 
      <span aria-hidden="true">×</span> 
      </button> 
      <h5>Startdatum: {{trip.Startdate}}</h5> 
      <table border="1" bordercolor="#FFF" class="table table-striped"> 
      <tbody> 
       <tr> 
       <th> 
        <i class="fa fa-calendar"></i> 

DATE</th> 
       <th> 
        <i class="fa fa-plane"></i> 

IATA</th> 
       <th> 
        <i class="fa fa-clock-o"></i> 

DUTY</th> 
       <th> 
        <i class="fa fa-pencil-square-o pull-right"></i> 
       </th> 
       </tr> 
       <tr ng-repeat="day in trip.DAYS | filter:query | orderBy:'DATE'" style="background-color:#A1C8F0;"> 
       <td width="25%;">{{day.DATE}}</td> 
       <td width="25%;"> 
        <input ng-model="day.IATA" /> 
       </td> 
       <td width="25%;"> 
        <input ng-model="day.DUTY" /> 
       </td> 
       <td width="25%;"> 
        <button type="button" class="btn btn-danger pull-right" aria-label="Left Align" ng-click="delTripDay(trip, $index)"> 
        <span class="glyphicon glyphicon-trash" aria-hidden="true"></span> 
        </button> 
       </td> 
       </tr> 
      </tbody> 
      </table> 
      <form name="dayForm" ng-controller="DayController as dayCtrl" ng-submit="dayCtrl.addDay(trip)"> 
      <div class="row"> 
       <div class="col-xs-3 col-md-3">{{dayCtrl.day.DATE}}</div> 
       <div class="col-xs-3 col-md-3">{{dayCtrl.day.IATA}}</div> 
       <div class="col-xs-3 col-md-3">{{dayCtrl.day.DUTY}}</div> 
       <div class="col-xs-3 col-md-3"></div> 
      </div> 
      <div class="row"> 
       <div class="col-xs-3 col-md-3"> 
       <div ng-controller="DatepickerDemoCtrl"> 
        <p class="input-group"> 
        <input type="text" class="form-control" datepicker-popup="{{format}}" ng-model="dayCtrl.day.DATE" is-open="opened" datepicker-options="dateOptions" date-disabled="" ng-required="true" close-text="Close" /> 
        <span class="input-group-btn"> 
         <button type="button" class="btn btn-default" ng-click="open($event)"> 
         <i class="glyphicon glyphicon-calendar"></i> 
         </button> 
        </span> 
        </p> 
       </div> 
       <input ng-model="dayCtrl.day.DATE" type="text" class="form-control" placeholder="DATE (YYYY-MM-DD)" title="DATE" required="" /> 
       </div> 
       <div class="col-xs-3 col-md-3"> 
       <input ng-model="dayCtrl.day.IATA" type="text" class="form-control" placeholder="IATA" title="IATA" /> 
       </div> 
       <div class="col-xs-3 col-md-3"> 
       <input ng-model="dayCtrl.day.DUTY" type="text" class="form-control" placeholder="DUTY" title="DUTY" /> 
       </div> 
       <div class="col-xs-3 col-md-3"> 
       <button type="submit" ng-disabled="addDay.$invalid" class="btn btn-success pull-right" aria-label="Left Align"> 
        <span class="glyphicon glyphicon-plus" aria-hidden="true"></span> 
       </button> 
       </div> 
      </div> 
      </form> 
     </div> 
     </div> 
    </div> 
    </body> 

script.js

(function() { 
    var app = angular.module('showTrips', ['ui.bootstrap']); 


    app.controller('TripController', ['$scope', '$http', '$filter', 
    function($scope, $http, $filter) { 
     $http.get('trips.json').success(function(data) { 

     $scope.trips = data; 

     var orderBy = $filter('orderBy'); 

     var arrayLength = $scope.trips.length; 
     for (var i = 0; i < arrayLength; i++) { 
      var innerLength = $scope.trips[i].DAYS.length; 
      for (var j = 0; j < innerLength; j++) { 
      $scope.trips[i].DAYS[j].DATE = new Date($scope.trips[i].DAYS[j].DATE); 
      } 
     } 

     $scope.order = function(predicate, reverse) { 
      $scope.trips = orderBy($scope.trips, predicate, reverse); 
     }; 

     $scope.options = [{ 
      label: 'Januar', 
      value: '2014-01' 
     }, { 
      label: 'Februar', 
      value: '2014-02' 
     }, { 
      label: 'März', 
      value: '2014-03' 
     }, { 
      label: 'April', 
      value: '2014-04' 
     }, { 
      label: 'Mai', 
      value: '2014-05' 
     }, { 
      label: 'Juni', 
      value: '2014-06' 
     }, { 
      label: 'Juli', 
      value: '2014-07' 
     }, { 
      label: 'August', 
      value: '2014-08' 
     }, { 
      label: 'September', 
      value: '2014-09' 
     }, { 
      label: 'Okotber', 
      value: '2014-10' 
     }, { 
      label: 'November', 
      value: '2014-11' 
     }, { 
      label: 'Dezember', 
      value: '2014-12' 
     }]; 

     $scope.addTrip = function() { 
      $scope.trips.push({ 
      'Startdate': $scope.newTrip, 
      DAYS: [] 
      }) 
      $scope.order('Startdate', false) 
      $scope.newTrip = '' 
     } 

     $scope.deleteTrip = function(index) { 
      $scope.trips.splice(index, 1); 
     } 

     $scope.delTripDay = function(trip, index) { 
      //creating array structure like UI 
      var deleteDays = $filter('orderBy')($filter('filter')(trip.DAYS, $scope.query), 'DATE'); 
      deleteDays.splice(index, 1); // then delete by index 
      trip.DAYS = deleteDays; //reassigning update array to trip days 
      $scope.trip.DAYS = $filter('orderBy')($filter('filter')(trip.DAYS, $scope.query), 'DATE'); 
     } 

     $scope.savedJSON = ''; 

     $scope.save = function() { 
      $scope.savedJSON = angular.toJson($scope.trips); 
     }; 
     }); 


    } 
    ]); 


    app.controller("DayController", function($scope, $filter) { 

    this.day = {}; 
    this.addDay = function(trip) { 
     trip.DAYS.push(this.day); 
     this.day = {}; 
     $scope.trip.DAYS = $filter('orderBy')($filter('filter')(trip.DAYS, $scope.query), 'DATE'); 
    } 

    }); 




    app.controller('DatepickerDemoCtrl', function($scope) { 
    $scope.today = function() { 
     $scope.datum = new Date(); 
    }; 
    $scope.today(); 

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

    // Disable weekend selection 
    $scope.disabled = function(date, mode) { 
     return (mode === 'day' && (date.getDay() === 0 || date.getDay() === 6)); 
    }; 

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

    $scope.open = function($event) { 
     $event.preventDefault(); 
     $event.stopPropagation(); 

     $scope.opened = true; 
    }; 

    $scope.dateOptions = { 
     formatYear: 'yy', 
     startingDay: 1 
    }; 

    $scope.formats = ['yyyy-MM-dd', 'dd-MMMM-yyyy', 'yyyy/MM/dd', 'dd.MM.yyyy', 'shortDate']; 
    $scope.format = $scope.formats[0]; 
    }); 

})(); 
+0

Для чего я вижу, что ваш plnkr содержит только одну кнопку Add trip, я пропущу sth? –

+0

он показывает два, когда я открываю данную ссылку ... –

+0

Я получаю только одну кнопку «Добавить поездку» вверху, с несколькими уже показанными отключениями: \ –

ответ

1

Ваша вторая кнопка включена в div с другим контроллером. Ваша переменная newTrip обновляется в контроллере DatepickerDemoCtrl, а не в TripControlle; Я проверил, добавив

$scope.$watch('newTrip',function(newValue, oldValue){ 
    console.log(newValue); 
}); 

как первая строка в DatepickerDemoCtrl. Надеюсь, что поможет найти путь для ответа :-)

Смежные вопросы