2017-03-18 19 views
1

私はangular-modal-serviceライブラリを使用しています。私のロジックは:モーダルが開かれているときには、SomeService$rootScope.$broadcastからSomeServiceからモーダルコントローラへの機能を実行し、サービスからモーダルコントローラにリソースを送信できるようにします。しかし、それは発砲しません。私が逃したものを理解するのを助けてください。ありがとうございました。angularjsモーダルサービスブロードキャストと問題

**サービス:**

angular.module('ng-laravel').service('SomeService', function($rootScope, Restangular, CacheFactory, $http) { 
    this.testFunction = function() { 
     console.log("from service"); 
     $rootScope.$broadcast('event', {success:'success'}); 
    }; 
} 

**コントローラー:**

$scope.show = function(customer_id) { 

     ModalService.showModal({ 
      templateUrl: 'modal.html', 
      inputs: { 
       customer_id: customer_id 
      }, 
      scope: $scope, 
      controller: function($scope, close) { 
       $scope.customer_id = customer_id; 
       $scope.close = function(result) { 
        close(result, 500); // close, but give 500ms for bootstrap to animate 
       }; 
       $scope.$on('event', function(event, data){ 
        alert('yes'); 
        console.log('from modal controller'); 
       }); 
      } 
     }).then(function(modal) { 
     SomeService.testFunction(customer_id, tour_id); 
      modal.element.modal(); 
      modal.close.then(function(result) { 
       $scope.message = "You said " + result; 
      }); 
     }); 
    }; 

それが動作する機能を切り替えた後、しかし... はどのように私は、モーダルにデータを渡すことができます? ui-bs-modalのように、彼らは解決しました。

+0

は、あなたが不足している。このため試す 'これを返す;'あなたのサービスでは? –

+2

@PrashantGhimireサービスから 'this'を返す必要はありません。' service'は関数の 'this'(コンテキスト)を暗黙的に返します –

+0

嬉しいことです! @PankajParkar;) –

答えて

1

モーダルコントローラからのイベントがバインドされる前に、イベントをブロードキャストしています。したがって、イベントをブロードキャストする前に、イベントリスナーが登録されていることを確認してください(モーダルコントローラがロードされていることを意味します)。したがってSomeService.testFunction();の後にshowModalメソッドを呼び出してください。サービス機能がModalService.showModal前に呼び出されるようモーダルコントローラは、インスタンス化または作成される前に、

$scope.show = function(customer_id) { 
    ModalService.showModal({ 
     templateUrl: 'modal.html', 
     inputs: { 
      customer_id: customer_id 
     }, 
     scope: $scope, 
     controller: function($scope, close) { 
      //code as is 
      //listeners will get register from here. 
     } 
    }) 
    .then(function(modal) { 
     SomeService.testFunction(); //broadcasting event 
    }).catch(function(error) { 
     // error contains a detailed error message. 
     console.log(error); 
    }); 
}; 
+1

templateURLを非同期に取得する必要があるので、 'show.modal'約束から**チェーン**する必要があります。 – georgeawg

+0

@georgeawgね、ヘッドアップメイトに感謝します。あなたのキャッチを感謝します:)私はその愚かなことを逃した;) –

+0

それは素晴らしいです、それは動作します。私は数時間もかかった。 : –

1

あなたは、イベントを放送しています。順序を変更してみてください。それはうまくいくはずです。 $scope.showインサイド

$scope.show = function(){ 
ModalService.showModal({ 
     .... 
     // Listen for broadcast event 
}); 
SomeService.testFunction(); 
} 
関連する問題