我正在決定控制器之間通信的正確方式。控制器之間的應用程序中發生了很多通信。我讀到,我可以使用$broadcast
或$emit
$rootScope
來做到這一點。但是,我想出了另一個使用承諾和服務通知控制器的想法。在使用服務和承諾的控制器之間進行通信
<html ng-app="testApp">
<head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.26/angular.min.js"></script>
<script>
angular.module('testApp', [])
.service('NotificationService', function ($q) {
var notificationDefer = $q.defer();
this.whenDoSth = function() {
return notificationDefer.promise;
};
this.notifyOthers = function (valueToPass) {
notificationDefer.notify(valueToPass);
};
return this;
})
.controller('PubController', function ($scope, NotificationService) {
$scope.doSthOnClickAndNotifyOthers = function() {
NotificationService.notifyOthers("valueToPass");
// do sth else
};
})
.controller('SubController', function (NotificationService) {
NotificationService.whenDoSth().then(null, null, function(value) {
// do sth with the value
})
});
</script>
</head>
<body ng-controller="PubController as pubCtrl">
<button ng-click="pubCtrl.doSthOnClickAndNotifyOthers()">Place Order</button>
</body>
你認爲這比使用$ rootScope一個更好的辦法?
其中沒有任何內在錯誤。查看Facebook的Flux模式。 –
也許這個問題在代碼審查部分會更好 –