2016-03-16 16 views
9

Gần đây, chúng tôi đã cập nhật ứng dụng của mình để sử dụng phiên bản góc mới nhất, từ phiên bản trước 1.3.0 đến 1.5.0. Rõ ràng bây giờ chúng tôi va vào một sự thay đổi phá vỡ giới thiệu trong 1.3.0:góc 1.3.0 và đầu vào [type = string]

https://github.com/angular/angular.js/issues/9218

Chúng tôi đã có một chỉ thị tùy chỉnh mà cho phép chúng tôi sử dụng bộ chọn ngày pikaday:

module.directive('pikaday', function() { 
    return { 
     require: 'ngModel', 
     link: function preLink(scope, element, attrs, controller) { 
      var $element = $(element), 
       momentFormat = 'DD/MM/YYYY', 
       year = new Date().getFullYear(); 

      // init datepicker 
      var picker = new Pikaday(
       { 
        field: document.getElementById(attrs.id), 
        firstDay: 1, 
        format: momentFormat, 
        minDate: new Date((year - 1) + '-01-01'), 
        maxDate: new Date((year + 1) + '-12-31'), 
        yearRange: [year - 1, year + 1], 
        onSelect: function (date) { 
         controller.$setViewValue(date); 
        }, 
        defaultDate: scope.$eval(attrs.ngModel), // require: 'ngModel' 
        setDefaultDate: true 
       }); 

      // format model values to view 
      controller.$formatters.unshift(function (modelValue) { 
       var formatted = (modelValue) 
        ? moment(modelValue).format(momentFormat) 
        : modelValue; 
       return formatted; 
      }); 

      // parse view values to model 
      controller.$parsers.unshift(function (viewValue) { 
       if (viewValue instanceof Date) { 
        return viewValue; 
       } 
       else { 
        return moment(viewValue, momentFormat).toDate(); 
       } 
      }); 
     } 
    }; 
}) 

này được sử dụng để làm việc tốt , nhưng bây giờ sau khi ràng buộc một biểu mẫu có điều khiển này, giá trị phạm vi của tôi đột nhiên thay đổi từ một đối tượng Date thành một chuỗi (không bao giờ tương tác với điều khiển!) Điều thú vị là điều này xảy ra mà không có trình định dạng hoặc phân tích cú pháp bao giờ được gọi. Vì vậy, có vẻ như góc chỉ quyết định thay đổi giá trị phạm vi chỉ vì nó đang bị ràng buộc một đầu vào của loại "văn bản", ngay cả khi giá trị trong đầu vào là không bao giờ xúc động.

Tôi không muốn sử dụng dữ liệu nhập [type = text] vì tôi không muốn trình duyệt buộc phải xử lý ngày tháng của riêng mình.

Nếu trình định dạng/phân tích cú pháp của tôi sẽ được gọi là tôi sẽ biết cách giải quyết vấn đề này, nhưng điều này khiến tôi bối rối.

Tôi chỉ có thể hiển thị một ngày trong một khoảng và có một nút người dùng có thể bấm vào để đẻ trứng plugin pikaday, nhưng tôi muốn hành vi ở lại như là ...

Trả lời

2

Bạn đã thấy cách giải quyết này từ https://github.com/angular-ui/bootstrap/issues/2659?

Tất cả bạn phải làm là thêm một chỉ thị:

directive('datepickerPopup', function(){ 
    return { 
    restrict: 'EAC', 
    require: 'ngModel', 
    link: function(scope, element, attr, controller) { 
    //remove the default formatter from the input directive to prevent conflict 
    controller.$formatters.shift(); 
    } 
} 
}) 

làm việc xung quanh loại bỏ các định dạng làm việc không tốt bụng giới thiệu phiên bản 1.3.0 và do đó giải quyết vấn đề với nó.

Sửa lỗi này nên làm cho nó vì nó được cảm ơn rộng rãi trong chuỗi github.

+0

Cảm ơn bạn mico. Tôi đã thêm nó vào đầu của hàm liên kết của chỉ thị pikaday của tôi. Làm việc như một say mê. Đáng tiếc là chúng ta phải vá góc để làm việc này. – Davy

Các vấn đề liên quan