0

コントローラーのようにスコープを設定するディレクティブを作成する必要があります。その中に入力とボタンがあります。一部のボタンがクリックされると、$scope.refresh() が呼び出され、モデル値が一部のグリッドに渡されて更新されます。

ほとんどのものは正常に動作します。モデルを内部入力にバインドし、ng-click を使用してボタン クリック イベントをバインドし、refresh() メソッドを呼び出します。しかし、更新機能では、データ テーブルの ID を取得して操作する必要があります。今のところ、ng-click のメソッド パラメータを介してのみ渡すことができます。コードは以下のとおりです。

<div ng-controller="MyController">
    <input ng-model="year"/>
    ........
    <button ng-click="refresh('grid1, grid2')">Refresh</button>
    <button ng-click="reset()">Reset</button>
</div>

見た目が悪いと思います。グリッド ID を他のメソッドで再利用する必要がある場合は、何度も渡す必要がありますが、attr をコントローラーに渡す方法やコントローラーを拡張する方法がわかりません。このようなことを達成する良い方法はありますか?

<div my-controller="MyController" grids='grid1, grid2' charts='chart1,chart2' ...>
    <input ng-model="year"/>
    ......
    <button ng-click="refresh()">Refresh</button>
    <button ng-click="reset()">Reset</button>
</div>

あるいは考え方が悪いのかもしれません。この仕事をするために別の方法を使ったほうがいいですか?

更新しました:

ユースケースは次のようになります。

クエリとしていくつかの入力を含む再利用可能なコンポーネントを作成する必要があります (私が推測するトランスクルージョンを介して)。このコンポーネントは、いくつかの外部グリッドとチャートにバインドされています (残念ながら、それらはまだディレクティブではありません)。コンポーネントには、ng-click を使用して refreshGrids または refreshCharts アクションをトリガーするボタンがあります。アクション内で setQuery() メソッドを呼び出し、モデル (入力の値) をメソッドに渡すには、グリッドとチャートの ID が必要です。そのため、ID をコンポーネントまたはアクションに渡す必要があります。

ng-controller を使用する理由は、分離のための新しいスコープを作成するためです。

4

2 に答える 2

0

解決策を得ました。

Angular UI のソース コードを調べたところ、datepicker がコントローラーを囲み、それにディレクティブをリンクする方法を使用していることがわかりました。

このコード行を確認してください: https://github.com/angular-ui/bootstrap/blob/master/src/datepicker/datepicker.js#L135

于 2013-09-26T03:40:07.200 に答える