2015-02-24 3 views
2

Я делал проект с datepicker (JQuery). Когда я нажимаю дату в datepicker, она никогда не показывает дату, если набирается пробел или ввод. Я хочу, чтобы при щелчке по дате была указана дата, на которую была нажата.Angularjs и Jquery datepicker data-binding

Я ожидаю, что на выходе будет автоматически отображаться дата при нажатии даты в datepicker. Но я должен нажать пробел первым, прежде чем она генерирует/показать дату .. Пожалуйста, помогите .. Это мои коды:

$(document).ready(function() { 
 
       $("#datepickerfrom").datepicker({ 
 
        numberOfMonths: 1, 
 
        onSelect: function (selected) { 
 
         $("#datepickerto").datepicker("option", selected) 
 
        } 
 
       }); 
 
       $("#datepickerto").datepicker({ 
 
        numberOfMonths: 1, 
 
        onSelect: function (selected) { 
 
         $("#datepickerfrom").datepicker("option", selected) 
 
        } 
 
       }); 
 
       // jQuery object; this demo 
 
      }); 
 
      function GetbyDate(fr, t) { 
 
       var from = new Date(t) 
 
      }; 
 

 
      scope.changeDate = function() { 
 
       scope.models = null; 
 
       http.get('GetReportList?from=' + scope.filter_fromDate + '&to=' + scope.filter_toDate).success(
 
        function (data) { 
 
         scope.models = data; 
 
        }); 
 
      }
   <p class="input-group"> 
 

 
           <input type="text" class="form-control" id="datepickerfrom" data-ng-model="filter_fromDate" /> 
 
           
 
           <span class="input-group-btn"> 
 
            <button type="button" class="btn btn-default"> 
 
             <i class="glyphicon glyphicon-calendar"></i> 
 
            </button> 
 
           </span> 
 
           {{filter_fromDate}} 
 
          </p> 
 

 
          <p class="input-group"> 
 
           <input type="text" class="form-control" id="datepickerto" data-ng-model="filter_toDate" /> 
 
           <span class="input-group-btn"> 
 
            <button type="button" class="btn btn-default"> 
 
             <i class="glyphicon glyphicon-calendar"></i> 
 
            </button> 
 
           </span> 
 
           {{filter_toDate}} 
 
          </p>

ответ

2

Да! Я получил ответ.

Благодаря этому sample jsfiddle answer. Я узнал, что причина, по которой я не могу показать дату, заключается в том, что я включил ее в контроллер.

Посмотрите на это:

var PRApp = angular.module('PRApp', []); 
 
     PRApp.controller('PRCtrl', ['$scope', '$http', function (scope, http) { 
 

 
      http.get('GetList').success(function (data) { 
 

 
       scope.models = data; 
 
       scope.sorting = "-PRDate"; 
 

 
       var i = 0; 
 
       for (i = 0; i < scope.models.length; i++) { 
 
        scope.models[i].id = i; 
 
       } 
 
      }); 
 

 
      scope.getStatus = http.get('GetStatusList').success(function (status) { 
 
       scope.StatusList = status 
 
      }); 
 

 
      function GetbyDate(fr, t) { 
 
       var from = new Date(t) 
 
      }; 
 

 
      scope.changeDate = function() { 
 
       scope.models = null; 
 
       http.get('GetReportList?from=' + scope.filter_fromDate + '&to=' + scope.filter_toDate).success(
 
        function (data) { 
 
         scope.models = data; 
 
        }); 
 
      } 
 
      scope.jsonDatetotext = function (jsondate) { 
 
       // jsondate format: /Date(#############)/ 
 
       // substr(6) will remove '/Date(' 
 
       // parseInt will convert remaing string '#############' to int and ignores ')/' 
 
       return new Date(parseInt(jsondate.substr(6))); 
 
      }; 
 

 

 
     }]); 
 
     PRApp.directive('calendar2', function() { 
 
      return { 
 
       require: 'ngModel', 
 
       link: function (scope, el, el2, attr, ngModel) { 
 

 
        attr.$observe("show", function (val) { 
 
         if (val == 'true') { 
 
          $(el).datepicker("show"); 
 
         } 
 
         else { 
 
          $(el).datepicker("hide"); 
 
         } 
 
        }); 
 

 
        attr.$observe("show", function (val) { 
 
         if (val == 'true') { 
 
          $(el2).datepicker("show"); 
 
         } 
 
         else { 
 
          $(el2).datepicker("hide"); 
 
         } 
 
        }); 
 

 
        $(el).datepicker({ 
 
         minDate: '-5Y', 
 
         dateFormat: 'MM d, yy', 
 
         onSelect: function (dateText) { 
 
          scope.$apply(function() { 
 
           ngModel.$setViewValue(dateText); 
 
          }); 
 
         } 
 
        }); 
 

 
        $(el2).datepicker({ 
 
         minDate: '-5Y', 
 
         dateFormat: 'MM d, yy', 
 
         onSelect: function (dateText) { 
 
          scope.$apply(function() { 
 
           ngModel.$setViewValue(dateText); 
 
          }); 
 
         } 
 
        }); 
 

 
       } 
 
      }; 
 
     });
<span class="input-group-addon"> 
 
            <span data-ng-click="show=!show" class="glyphicon glyphicon-calendar"></span> 
 
           </span> 
 
           <input data-show="{{show}}" type="text" name="filter_fromDate" calendar2 data-ng-model="filter_fromDate" 
 
            class="form-control" placeholder="mm/dd/yyyy" data-ng-minlength="10" /> 
 

 
           </div> 
 

 
                <br /> 
 

 
         <div class="input-group"> 
 
           <span class="input-group-addon"> 
 
            <span data-ng-click="show=!show" class="glyphicon glyphicon-calendar"></span> 
 
           </span> 
 
           <input data-show="{{show}}" type="text" name="filter_toDate" calendar2 data-ng-model="filter_toDate" 
 
            class="form-control" placeholder="mm/dd/yyyy" data-ng-minlength="10" /> 
 
    
 
     
 
          </div> 
 
          <br /> 
 

 
          <input type="submit" class="btn btn-primary btn-sm" value="GO" /> 
 

 
         </div>

0

код, как это должно всегда идти в функцию связи с директивы. $(document).ready(function() {/**/} ^ - Вы не должны использовать это вообще.

Один из подходов может быть:

angular 
 
    .module('app', []) 
 
    .directive('thirdparty', jQueryDirective) 
 

 

 
function jQueryDirective(){ 
 
    return { 
 
    restrict: 'E', 
 
    template: '<div id="foo"></div>', 
 
    link: function(scope, element, attrs){ 
 
     $(element).append('appended with jquery') 
 
    } 
 
    } 
 
} 
 

 

 
angular.bootstrap(document, ['app'])
#foo { 
 
    width: 100px; 
 
    height: 100px; 
 
    background: red; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<thirdparty/>

+0

Is jquerydirective также в угловой? Я пробовал делать то, что ты сказал. Все еще ничего не улучшилось. – Mijevoli

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