質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
AngularJS

AngularJSはオープンソースのJavaScriptフレームワークです。ブラウザ上で動作するウェブアプリケーションの開発にMVCアーキテクチャを取り入れることを目的としています。

Q&A

解決済

1回答

3567閲覧

Angular JSで複数のcontrollerの処理の共通化

xexnteratail

総合スコア12

AngularJS

AngularJSはオープンソースのJavaScriptフレームワークです。ブラウザ上で動作するウェブアプリケーションの開発にMVCアーキテクチャを取り入れることを目的としています。

0グッド

0クリップ

投稿2016/09/22 15:59

###環境
Angular JS 1.5.8
UI Grid

###疑問概要
複数のcontrollerでほぼ共通の処理を共通化したい。
その処理は$scopeへの値設定が主目的。

###疑問詳細
Angular JSで、あるページにUi Gridを使い項目表示用に
複数のグリッドを配置しています。

ページとグリッドはそれぞれがcontrollerを持ち、
親:ページ
子:グリッド
となるようにcontrollerを設定しています。

複数配置してあるグリッドでは、それぞれ行が選択された際に
選択された行のレコードIdを親に通知する処理をしています。

この親:ページへの通知処理は親:ページ内の設定対象配列
が異なるだけでほぼ同一の処理です。

このため、この処理を何らかの形で共通化したいのですが、
$scopeを使用した処理の為、service等では設定できずにおります。

共通化の方法はございますでしょうか。

###作成したコード
function rowClicked() {

//「選択されている行」を抽出 可読性の為変数に代入
var currentSelectedRows = $scope.gridApi.selection.getSelectedRows();

//選択された行数 ループに使用 可読性の為変数に代入
var looplimit = $scope.gridApi.selection.getSelectedRows().length;

//親:ページのcontroller内の配列に現在の選択行のIDを登録
//各グリッド毎に異なるのは、
//$scope.$parent.kartekubunGrdSelId配列のみ

$scope.$parent.kartekubunGrdSelId = [];//初期化 for (var i = 0; i < looplimit; i++) { $scope.$parent.kartekubunGrdSelId[i] = currentSelectedRows[i].Id; } //親コントローラーに行選択を通知 $scope.$emit('CellSelected', 'kartekubunGrd');

}

よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ui-gridとそのコントローラーをdirectiveにするのはどうでしょうか。

directiveを使用する際にパラメータとしてgridの名称(kartekubunGrd等)を渡してあげることで、emit時のパラメータにgridの名称を渡すことが出来ます。
以下のようにgridで選択したidもemitで渡してあげれば親コントローラのイベントハンドリングでgrid名と選択したidを使用した処理ができると思います。

javascript

1var gridName = directiveの引数; 2$scope.$emit('CellSelected', {name:gridName, id:selectedId}); 3}

投稿2016/09/22 17:42

pinpikokun

総合スコア376

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

xexnteratail

2016/09/23 01:44

ご回答ありがとうございます。 なるほど! directiveとして処理をするのですね。 試してみます。 結果を報告致します。
xexnteratail

2016/09/24 04:09

directiveとすることでうまくいきました! ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問