how to bind Bootstrap-datepicker element with angularjs ng-model?

后端 未结 11 666
囚心锁ツ
囚心锁ツ 2020-11-30 04:44

Here is the html for the date field :

相关标签:
11条回答
  • 2020-11-30 05:11

    I just found a solution to this myself. I just pass in the model name to the directive (which I found most of online). This will set the value of the model when the date changes.

    <input data-ng-model="datepickertext" type="text" date-picker="datepickertext" />{{datepickertext}}    
    
    angular.module('app').directive('datePicker', function() {
        var link = function(scope, element, attrs) {
            var modelName = attrs['datePicker'];
            $(element).datepicker(
                {
                    onSelect: function(dateText) {
                        scope[modelName] = dateText;
                        scope.$apply();
                    }
                });
        };
        return {
            require: 'ngModel',
            restrict: 'A',
            link: link
        }
    });
    
    0 讨论(0)
  • 2020-11-30 05:14

    As @lort suggests, you cannot access the datepicker model from your controller because the datepicker has its own private scope.

    If you set: ng-model="parent.checkOut"

    and define in the controller: $scope.parent = {checkOut:''};

    you can access the datepicker using: $scope.parent.checkOut

    0 讨论(0)
  • 2020-11-30 05:16

    I have the same problem and resolve like this

    added in html part

    <input class="someting" id="datepicker" type="text" placeholder="Dae" ng-model=""/>
    

    and simple in Controller call

    $scope.btnPost = function () {
    
              var dateFromHTML = $('#datepicker').val();
    
    0 讨论(0)
  • 2020-11-30 05:17

    This worked for me:

    set

    ng-model="date"

    on your angular controller:

    
        $scope.date = '';
    
        $('#check-out').datepicker().on('changeDate', function (ev) {
            $scope.date= $('#check-out').val();
            $scope.$digest();
            $scope.$watch('date', function (newValue, oldValue) {
                 $scope.date= newValue;
            });
        });
    
    

    My actual trouble was that the value of the model was not reflected till another component on the scope was changed.

    0 讨论(0)
  • 2020-11-30 05:18

    I am using Angular JS 1.5.0 and Bootstrap 3 Datetimepicker from https://eonasdan.github.io/bootstrap-datetimepicker/

    After some time and struggling, I finally found a solution how to make it work for me :)

    JSFiddle: http://jsfiddle.net/aortega/k6ke9n2c/

    HTML Code:

      <div class="form-group col-sm-4" >
         <label for="birthdate" class="col-sm-4">Birthday</label>
         <div class="col-sm-8">
           <div class="input-group date" id="birthdate"  ng-model="vm.Birthdate" date-picker>
             <input type="text" class="form-control netto-input"  ng-model="vm.Birthdate" date-picker-input>
    
             <span class="input-group-addon">
               <span class="glyphicon glyphicon-calendar"></span>
             </span>
           </div>
         </div>
      </div>
     <div class="form-group col-sm-4">
         <label for="birthdateText" class="col-sm-4">Model:</label>
         <div class="col-sm-8">
             <input type="text" class="form-control netto-input"  ng-model="vm.Birthdate">
         </div>
      </div>
    </body>
    

    App.js:

    Simply a controller setting the viewmodels Birtdate attribute:

    var app = angular.module('exampleApp',[]);
    
    app.controller('ExampleCtrl',  ['$scope', function($scope) {
        var vm = this;
        vm.Birthdate = "1988-04-21T18:25:43-05:00";
    }]);
    

    The first directive is initializing the datetimepicker and listening to the dp.change event.

    When changed - the ngModel is updated as well.

    // DatePicker -> NgModel
    app.directive('datePicker', function () {
        return {
            require: 'ngModel',
            link: function (scope, element, attr, ngModel) {
                $(element).datetimepicker({
                    locale: 'DE',
                    format: 'DD.MM.YYYY',
                    parseInputDate: function (data) {
                        if (data instanceof Date) {
                            return moment(data);
                        } else {
                            return moment(new Date(data));
                        }
                    },
                    maxDate: new Date()
                });
    
                $(element).on("dp.change", function (e) {
                    ngModel.$viewValue = e.date;
                    ngModel.$commitViewValue();
                });
            }
        };
    });
    

    The second directive is watching the ngModel, and triggering the input onChange event when changed. This will also update the datetimepicker view value.

    // DatePicker Input NgModel->DatePicker
    app.directive('datePickerInput', function() {
        return {
            require: 'ngModel',
            link: function (scope, element, attr, ngModel) {
                // Trigger the Input Change Event, so the Datepicker gets refreshed
                scope.$watch(attr.ngModel, function (value) {
                    if (value) {
                        element.trigger("change");
                    }
                });
            }
        };
    });
    
    0 讨论(0)
  • 2020-11-30 05:20

    I am using bootstrap 3 datepicker https://eonasdan.github.io/bootstrap-datetimepicker/ and angularjs, I had the same problem with ng-model, so I am getting input date value using bootstrap jquery function, below is the code in my controller, it's worked for me.

    Html

    <input class="form-control" name="date" id="datetimepicker" placeholder="select date">
    

    Controller

    $(function() {
    
        //for displaying datepicker
    
        $('#datetimepicker').datetimepicker({
            viewMode: 'years',
            format: 'DD/MM/YYYY',
        });
    
        //for getting input value
    
        $("#datetimepicker").on("dp.change", function() {
    
            $scope.selecteddate = $("#datetimepicker").val();
            alert("selected date is " + $scope.selecteddate);
    
        });
    
     });
    
    0 讨论(0)
提交回复
热议问题