jquery-ui
  • angular
  • datepicker
  • 2016-09-26 35 views 1 likes 
    1

    我在angularjs 2組件中遇到JQuery UI datepicker問題。AngularJS 2輸入字段不會更新ngModel for jquery日期選擇器日期更改

    它顯示從日期日曆更改日期,但其不更新基礎ngModel:dateSelected。

    dateSelected: string = ''; 
    

    這裏提交的日期選擇器輸入:

    <input type="text" class="form-control" [(ngModel)]="dateSelected" name='datepicker1' id='datepicker1' placeholder="Select a date"/> 
    

    ,我試圖設置爲從this.dateSelected模式,第二日期選擇器不工作選定的日期。

    $("#datepicker2").val(this.dateSelected); 
    

    另一方面,如果我通過jQuery val方式閱讀選定日期,它工作正常。

    var selectedDateInPicker = $("#datepicker1").val();  
        $("#datepicker2").val(selectedDateInPicker); 
    

    下面是代碼plunker:https://plnkr.co/edit/iLAFa8yrCLeTcd27G8bY?p=preview

    能否請你幫忙嗎?

    回答

    5

    更新

    也許你要編寫自定義指令將實現ControlValueAccessor

    declare var $: any; 
    
    @Directive({ 
        selector: '[datepicker]', 
        providers: [{ 
        provide: NG_VALUE_ACCESSOR,useExisting: 
        forwardRef(() => DatePickerDirective), 
        multi: true 
        }] 
    }) 
    export class DatePickerDirective implements ControlValueAccessor { 
        value: string; 
    
        constructor(protected el: ElementRef) {} 
    
        ngAfterViewInit(){ 
         $(this.el.nativeElement).datepicker({ 
         changeMonth: true, 
         yearRange: "1:100", // you can pass it as @Input options 
         changeYear: true 
         }).on('change', e => this.onModelChange(e.target.value)); 
        } 
    
        onModelChange: Function =() => {}; 
    
        onModelTouched: Function =() => {}; 
    
        writeValue(val: string) : void { 
         this.value = val; 
        } 
    
        registerOnChange(fn: Function): void { 
         this.onModelChange = fn; 
        } 
    
        registerOnTouched(fn: Function): void { 
         this.onModelTouched = fn; 
        } 
    } 
    

    Plunker Example

    產地

    我認爲你可以做到這一點通過使用工作如下:

    $(selector-ng-datepicker).datepicker({ 
        changeMonth: true, 
        yearRange: "1:100", 
        changeYear: true 
    }).on('change', e => this.dateSelected = e.target.value); 
    

    Updated Plunker

    +0

    @ yurzui其一個字段,可以以其他方式處理的解決方案(例如,模糊),但有沒有角度方式或標準解決方案的任何通用解決方案。 –

    +0

    角度的方式是不要使用jquery。我添加多字段形式的解決方案 – yurzui

    +0

    @ yurzui是的我瞭解角度的​​方式不建議使用jQuery,但有些時候在業務需要我們必須添加一些現有的工作控制,如jQuery日期選擇器,谷歌地圖自動完成這些還沒有在角2 ,所以我必須使用。謝謝 –

    相關問題