提供者的访问等级

时间:2018-11-26 12:13:37

标签: angular ng-bootstrap

我正在使用timepicker from the NG Bootstrap library,但是我想在滚动到午夜时切换日期。我正在使用自定义时间适配器将日期建模为日期而不是/my/install/location对象,并且将日期缓存在适配器中,因此当我从NgbTimeStruct转换时,它会转换为正确的日期。 / p>

当我想从组件更改日期时出现问题。在这种情况下,我需要在时间适配器上调用一个可以更改缓存日期的方法,但是我无法访问适配器类的实例。

我正在将其提供给在providers数组中使用它的组件:

NgbTimeStruct

在同一组件中,我想通过在类上调用providers: [ { provide: NgbTimeAdapter, useClass: NgbTimeDateAdapter } ] 方法来更改日期,但是它需要在与时间选择器使用的实例相同的实例中更新缓存的值。如果我将适配器分别提供给组件,则可以调用所需的方法,但这是一个不同的实例,因此帮助不大。

NgbTimeDateAdapter.updateCachedDate

如何使用useClass方法访问使用providers数组注入的类的正确实例?

NgbTimeDateAdapter

@Component({
  selector: 'app-time-component',
  templateUrl: './time.component.html',
  styleUrls: ['./time.component.css'],
  providers: [
    NgbTimeDateAdapter,
    { provide: NgbTimeAdapter, useClass: NgbTimeDateAdapter }
  ]
})
export class TimeComponent implements OnInit {
  constructor (
    private ngbTimeDateAdapter: NgbTimeDateAdapter
  ) { }

  // ...

  setAsNextDay () {
    this.ngbTimeDateAdapter.updateCachedDate(1);
  }
  setAsPreviousDay () {
    this.ngbTimeDateAdapter.updateCachedDate(-1);
  }

}

0 个答案:

没有答案