2017-03-18 124 views
1

我正在使用angular-modal-service庫。我的邏輯是:當模式打開時,它將SomeService$rootScope.$broadcastSomeService的功能運行到模態控制器,這樣我可以將資源從服務發送到我的模態控制器。但是,它不會觸發。請幫我弄清楚我錯過了什麼。謝謝。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'(context)的功能 –

+0

很高興知道! @PankajParkar;) –

回答

1

您在模態控制器綁定事件之前正在廣播事件。因此,在廣播事件之前,請確保事件監聽器已註冊(意味着模塊控制器已被加載)。所以請在showModal方法後撥打SomeService.testFunction();

$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

你可能應該從**'show.modal'承諾鏈**,因爲它必須異步獲取templateURL。 – georgeawg

+0

@georgeawg嘿謝謝你的隊友。欣賞你的捕獲.. :)我錯過了那件愚蠢的事情;) –

+0

這很好,它的工作原理。我花了幾個小時。 :( –

1

你是廣播事件,模態控制器被實例化或創建之前,作爲服務功能ModalService.showModal之前調用。嘗試改變順序。這應該很好。

裏面$scope.show試試這個順序

$scope.show = function(){ 
ModalService.showModal({ 
     .... 
     // Listen for broadcast event 
}); 
SomeService.testFunction(); 
}