私はこのディレクティブのコンストラクタでオプションのパラメータを使用しようとしていますが、 "Modalのプロバイダがありません"というエラーのために常に失敗しています。Modal Angular2のプロバイダがありません
私はコンポーネントを持つModalクラスを持っています。私はmodal.shown()を購読して、私の指示に集中しています。さて、同じディレクティブを使用して、他のいくつかの要素に力を入れるようにしたいと思います。だから、私は、コンストラクタがその引数を渡すときにだけ動作するように、モーダルのオプションの引数を使うことを計画しました。
私は次のことをやった:
import { Directive, ElementRef, OnDestroy } from "@angular/core";
import { Subscription } from 'rxjs/Rx';
import { Modal } from "./modal";
import * as ng from "@angular/core";
import { Inject } from "@angular/core";
@Directive({
selector: "[tabFocus]"
})
export class Focus implements ng.OnDestroy, ng.OnInit {
private _subscription: Subscription;
constructor(private _el: ng.ElementRef, @Inject(Modal) private modal?: Modal) {
if (this.modal != undefined) {
this._subscription = this.modal.shown.subscribe(() => this._el.nativeElement.focus());
}
}
ngOnInit() {
this._el.nativeElement.focus();
}
ngOnDestroy() {
this._subscription.unsubscribe();
}
}
これは私がモーダルのhtml要素にディレクティブtabFocusを使用する場合、すなわち、焦点は完全にそこに行くモーダルの場合には素晴らしい作品。しかし、別のボタン要素のディレクティブを使用するたびに、コードが壊れ、「Modal用のプロバイダがない」というエラーが表示されます。
簡単な言葉で私が達成したいことは、同じ指示文を2つの異なる目的に使用できるようにすることです。 1)モーダルがある場合、モーダル上の要素はフォーカスを取得する必要があります。 2)モーダルがなく、そのディレクティブが要素に添付されている場合、その要素はフォーカスを取得するだけです。
'modal.ts'のコンテンツを投稿できますか? – Baumi
はい、考えを得るためにいくつかのmodal.tsを投稿してください。 – ShellZero