0

日付の動的リストを作成しています。ユーザーは必要なすべての日付ピッカーを追加できますが、一致する日付がないことを検証する必要があります。それらはすべて異なる必要があります。それが唯一の要件です。

カスタム ディレクティブの検証を行い、正常にトリガーされましたが、isolate スコープを使用しようとすると、そのエラー (複数のディレクティブ) が発生します。ここで見た他の質問/解決策は、分離スコープを削除することを提案していますが、ディレクティブに日付の配列を渡し、それらを現在選択されているものと比較できるようにする必要があります。

これは、問題を再現するコードペンです。noMatchingDatesディレクティブのを削除するscopeと、エラーが消えて、日付ピッカーを適切に表示および追加できます。私はこれを意味しますscope

scope: {
  getAllDates: "&allDates"
}

docsの次の行に関係していると思います:

分離スコープを要求する複数のディレクティブ。

また、isolate スコープを使用するより多くのディレクティブを持つ md-datepicker にも関係している可能性があります。では、どうすればこのエラーを解決できますか (それでも日付リストを送信できますか)?

md-datepickerの性質を考慮して解決できない場合 (スコープを維持する場合) 、どうすればこの動的検証に到達できますか? コントローラーと を使用して実行できると思いますng-changeが、適切な解決策になるかどうかはわかりません。

4

1 に答える 1

0

実際、ディレクティブが分離スコープを必要とする理由はありません。ディレクティブが再利用可能な「ビジュアル コンポーネント」のような場合は、分離スコープを使用します。あなたのディレクティブはロジックの検証に関するものであり、別のそのようなコンポーネントを妨げるべきではありません。

問題を解決するには、分離されたスコープを削除し、次のように HTML でディレクティブを使用します。

<div ... no-matching-dates="overtimeList">

次に、リンク関数で、次の方法でその属性の値を取得できます。

var dates = scope.$parse(attr.noMatchingDates);

これにより、 にバインドされているものの内容が得られるno-matching-datesため、この場合は が返されovertimeListます。

構文を使用したことはありませんctrl.$parsers.unshiftが、それを使用してその値を取得することもできるようです。scope.$parse私があなたに与えた行を削除して、次のように書いてください。

ctrl.$parsers.unshift(function(arrayOfDates) { ... })

これもうまくいくはずです。$watch毎回検証を実行する場合は、最初のアプローチで変更する必要があることに注意してください。

于 2016-05-15T16:42:31.917 に答える