Example: $emitと$broadcast ('-' * 25)
A Pen by nuko's kitchen on CodePen.
Example: $emitと$broadcast ('-' * 25)
A Pen by nuko's kitchen on CodePen.
| <h1>Example: $emitと$broadcast</h1> | |
| <p>$emitと$broadcastを使ってスコープ間連携を実現します。</p> | |
| <div ng-app="myApp"> | |
| <div ng-controller="mainController as main" class="ctrl"> | |
| <h2>mainController</h2> | |
| <p>Message: {{ main.message }}</p> | |
| <p>{{ main.count }}</p> | |
| <div ng-controller="emitController as emit" class="ctrl left"> | |
| <h3>emitController</h3> | |
| <p>$emitは自身と親のコントローラーにイベントを伝達する。</p> | |
| <p>Message: {{ emit.message }}</p> | |
| <p>{{ emit.count }}</p> | |
| <button ng-click="emit.countUp()">CountUp</button> | |
| </div> | |
| <div ng-controller="broadcastController as broadcast" class="ctrl right"> | |
| <h3>broadcastController</h3> | |
| <p>$broadcastは自身と子のコントローラーにイベントを伝達する。</p> | |
| <p>Message: {{ broadcast.message }}</p> | |
| <p>{{ broadcast.count }}</p> | |
| <button ng-click="broadcast.countUp()">CountUp</button> | |
| <div ng-controller="childController as child" class="ctrl"> | |
| <h4>childController</h4> | |
| <p>Message: {{ child.message }}</p> | |
| <p>{{ child.count }}</p> | |
| </div> | |
| <div ng-controller="childController as child" class="ctrl"> | |
| <h4>childController</h4> | |
| <p>Message: {{ child.message }}</p> | |
| <p>{{ child.count }}</p> | |
| </div> | |
| </div> | |
| </div> | |
| </div> |
| (function() { | |
| "use strict"; | |
| var appName = 'myApp'; | |
| angular | |
| .module(appName, []); | |
| angular | |
| .module(appName) | |
| .controller('mainController', mainCtrl) | |
| .controller('emitController', emitCtrl) | |
| .controller('broadcastController', broadcastCtrl) | |
| .controller('childController', childCtrl); | |
| function mainCtrl($scope){ | |
| var vm = this; | |
| vm.count = 0; | |
| $scope.$on('CountEvent', countEvent); | |
| function countEvent(event, data){ | |
| vm.count++; | |
| vm.message = data; | |
| } | |
| } | |
| function emitCtrl($scope){ | |
| var vm = this; | |
| vm.count = 0; | |
| vm.countUp = countUp; | |
| $scope.$on('CountEvent', countEvent); | |
| function countUp(){ | |
| $scope.$emit('CountEvent', '$emit: +1'); | |
| } | |
| function countEvent(event, data){ | |
| vm.count++; | |
| vm.message = data; | |
| } | |
| } | |
| function broadcastCtrl($scope){ | |
| var vm = this; | |
| vm.count = 0; | |
| vm.countUp = countUp; | |
| $scope.$on('CountEvent', countEvent); | |
| function countUp(){ | |
| $scope.$broadcast('CountEvent', '$broadcast: +1'); | |
| } | |
| function countEvent(event, data){ | |
| vm.count++; | |
| vm.message = data; | |
| } | |
| } | |
| function childCtrl($scope){ | |
| var vm = this; | |
| vm.count = 0; | |
| $scope.$on('CountEvent', countEvent); | |
| function countEvent(event, data){ | |
| vm.count++; | |
| vm.message = data; | |
| } | |
| } | |
| })(); |
| @import "bourbon"; | |
| body { | |
| padding: 1.5rem; | |
| font-size: .8em; | |
| } | |
| .ctrl { | |
| @include clearfix(); | |
| padding: .5rem; | |
| border: 1px solid #aaa; | |
| box-sizing: border-box; | |
| &.left { | |
| float: left; | |
| width: 50%; | |
| } | |
| &.right { | |
| float: right; | |
| width: 50%; | |
| } | |
| } |