Reputation: 347
I have a simple factory that broadcasts message when a POST, PUT and DELETE calls are done via it. After that inside a controller, I listen and perform a set of actions that are same for all the 3 calls. Can I listen to all 3 events in a single step?
In the factory,
$http.method(something)
.then(response => $rootScope.$broadcast('putpostdelMSG', response)) * 3 lines
In the controller (what I have)
$scope.$on('putMsg', (e, putResp) => ....long function chain..)
$scope.$on('postMsg', (e, postResp) => ....long function chain..)
$scope.$on('delMsg', (e, delResp) => ....long function chain..)
In the controller (what I want)
$scope.$on('{putMsg,postMsg,delMsg}', (e, {putRes,postResp,delResp}) => ....long function chain..)
The function chain to be done is the same when listening to broadcast from any of the 3 methods. Is there any way to shorten and not repeat the code? Thank you
Upvotes: 0
Views: 301
Reputation: 427
If you just need a central event handler, this it is, but I think to separate the concern, call different event handler is ok, just call the same underlying function.
var app = angular.module("app", []);
app.controller("exampleController", function($rootScope, $scope) {
$scope.Get = function() {
$rootScope.$broadcast("receivedMsg", "get data", "GET");
}
$scope.Post = function() {
$rootScope.$broadcast("receivedMsg", "update data", "POST");
}
$scope.$on("receivedMsg", function(e, response, requestMethod) {
if (requestMethod === "GET")
$scope.show = response
else
$scope.show = response
})
})
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="app" ng-controller="exampleController">
<button type='button' ng-click="Get()">GET</button>
<button type='button' ng-click="Post()">POST</button> {{show}}
</div>
Upvotes: 1