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

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

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

BootstrapはウェブサイトデザインやUIのWebアプリケーションを素早く 作成する可能なCSSフレームワークです。 Twitter風のデザインを作成することができます。

AngularJS

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

Q&A

1回答

3513閲覧

uibModal.openでcontrollerを指定した際のインスタンス破棄等について

mao999

総合スコア111

Bootstrap

BootstrapはウェブサイトデザインやUIのWebアプリケーションを素早く 作成する可能なCSSフレームワークです。 Twitter風のデザインを作成することができます。

AngularJS

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

0グッド

0クリップ

投稿2017/04/16 05:33

編集2017/04/16 05:36

###前提・実現したいこと

AngularJSでUI BootstrapのuibModalを使った処理しています。
$uibModal.open()時に、パラメータcontrollerを指定して、
別のコントローラでそのmodalの処理を捌くことを考えています。

###発生している問題

$uibModal.open()で指定したcontroller内で、
uibModalがopenしたらSocket.IOを使ってサーバにパケットを送信する様に作っており、
その応答をそのcontrollerで捌くようにしています。

しかし、どうやら、サーバからのレスポンスは1回きりなのに(サーバのログから判断,1度しか送信していない)、
当該controllerをopenした回数が増えるにつれて、

open回数:応答を捌いた回数 1回目:1回(ログメッセージ1個) 累計1個 2回目:2回(ログメッセージ2個追加) 累計3個 3回目:3回(ログメッセージ3個追加) 累計6個 4回目:4回(ログメッセージ4回追加) 累計10個 …

といった様に、何回も応答パケットを捌いている様なのです。

恐らく、controllerのインスタンスが破棄されていない等の理由で、
open()の度にインスタンスが1つずつ増えていき、
捌く回数もその分増えていっているという現象なのでしょうが、
どうすれば応答を捌く回数を1回にできるのでしょうか。
宜しくお願い致します。

###該当のソースコード
抜粋

Javascript

1メインのコントローラ内にて... 2var modalInstance = $uibModal.open({templateUrl:"~~",scope:$scope, 3 backdrop:true,size:"lg", 4 controllerAs:"dlg", 5 controller:"ModalController", 6 bindToController:true, 7 resolve: { 8 params: function(){ 9 return { 10 …略 11 }; 12 } 13 }, 14 windowClass:"~~~"}); 15modalInstance.rendered.then(function(){ 16}); 17modalInstance.result.then( 18function(result){ 19}, 20function(result){ 21}); 2223 24 25.controller('ModalController',['$scope','$rootScope','socketio','$uibModalInstance','params','$uibModal', 26 function($scope,$rootScope,socketio,$uibModalInstance,params,$uibModal){ 2728 socketio.emit(); 2930 socketio.on("publish",function(data){ 31 if(data.type == "test"){ 32 //socketio.emit()の応答をここで処理 33 } 34 }); 3536}])

###補足情報(言語/FW/ツール等のバージョンなど)
AngularJS 1.5.8
UI Bootstrap 2.1.4

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

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

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

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

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

guest

回答1

0

コントローラーが破棄されるタイミングでpublishのイベントをremoveしてみてはどうでしょうか

javascript

1$scope.$on('$destroy',function(){ 2 // publishのリスナーをremove 3});

投稿2017/04/20 10:01

pinpikokun

総合スコア376

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問