jQuery UI datepicker禁用选项未被Angular 2识别
我在Angular 2应用程序中使用jQueryUIDatePicker,它工作正常,只有一个例外。我的应用程序有一个单选按钮选项列表,当选中其中任何一个选项时,该列表会将名为ServiceTypeSelected的变量设置为true(当应用程序加载时,该变量最初为false) 我希望禁用日期选择器,直到用户检查其中一个单选按钮,使ServiceTypeSelected为true。我有一个单独的服务为用户建立订单,在datepicker组件中,我订阅了一个服务方法,该方法在用户通过应用程序的各个阶段时跟踪订单的建立。我知道,当选中单选按钮时,ServiceTypeSelected变量正在从false切换为true,并且我对服务的订阅可以识别变量的值何时发生变化,因为我插入的控制台日志的行为与我预期的一样,通知我在选中单选按钮之前日期选择器处于禁用状态,并在我选中单选按钮后通知我它正在启用日期选择器。但是,与我当前的代码一样,无论是否选中了单选按钮,日期选择器都被禁用 我已经确定语句的“如果”部分工作正常。如果我将datepicker的disabled属性设置为false,则datepicker将被禁用。如果我把它设为真,它就行了。问题在于声明的“其他”部分。控制台日志按照datepicker的disabled属性的预期工作,但不受影响。我很困惑jQuery UI datepicker禁用选项未被Angular 2识别,jquery,angular,this,jquery-ui-datepicker,rxjs5,Jquery,Angular,This,Jquery Ui Datepicker,Rxjs5,我在Angular 2应用程序中使用jQueryUIDatePicker,它工作正常,只有一个例外。我的应用程序有一个单选按钮选项列表,当选中其中任何一个选项时,该列表会将名为ServiceTypeSelected的变量设置为true(当应用程序加载时,该变量最初为false) 我希望禁用日期选择器,直到用户检查其中一个单选按钮,使ServiceTypeSelected为true。我有一个单独的服务为用户建立订单,在datepicker组件中,我订阅了一个服务方法,该方法在用户通过应用程序的各个
import { ViewChild, ElementRef, OnInit, AfterViewInit, Component } from
'@angular/core';
import {ControlValueAccessor, NG_VALUE_ACCESSOR } from
'@angular/forms';
import { OtrixService } from '../otrix.service';
declare var jQuery: any;
@Component({
selector: 'otrix-datepicker',
templateUrl: './datepicker.component.html',
styleUrls: ['./datepicker.component.scss']
})
export class DatepickerComponent implements OnInit, AfterViewInit {
@ViewChild('readyDate') dateInput: ElementRef;
constructor(
private otrixService: OtrixService,
) {}
ngOnInit() {
this.otrixService.getStagedOrder().subscribe((order) => {
if (!order.serviceTypeId) {
console.log('Service type not yet chosen. Datepicker
disabled.');
jQuery(this.dateInput.nativeElement).datepicker({disabled:
true});
console.log(this.dateInput.nativeElement);
} else if (order.serviceTypeId) {
console.log('Service type chosen. Enabling datepicker.');
jQuery(this.dateInput.nativeElement).datepicker({disabled:
false});
}
});
}
ngAfterViewInit() {
jQuery(this.dateInput.nativeElement).datepicker({
minDate: new Date(), // custom settings
maxDate: '30d',
showAnim: 'slideDown',
onSelect: (datePicked: boolean) => { // when user picks a date...
let readyDate =
jQuery(this.dateInput.nativeElement).datepicker('getDate');
this.otrixService.setReadyDate(readyDate);
}
});
}
}
是否确实正确调用了日期选择器启用/禁用?这可能是一个问题。@chrispy是的,我知道调用是正确的,因为如果我取出禁用它的jQuery代码行,并将其放在if语句之外的一行上,它就会工作。我注意到如果我使用传统函数而不是箭头函数,我得到一个错误,上面写着“无法准备未定义的属性nativeElement”。这就是为什么我认为这是“这个”的一个问题…好像它没有被正确地选择或者什么。嗯,我觉得应该在你的例子中适当地保留范围…@chrispy我刚刚编辑了我的帖子。见增加的段落。我很困惑。