The examples in this article describe the communication methods between AngularJS controllers. Share it with everyone for your reference, the details are as follows:
1. Use the inheritance method of scope
Since the inheritance of scope is based on the prototype inheritance method of js, there are two situations here. When the value above the scope is For basic types, modifying the value on the parent scope will affect the child scope. On the contrary, modifying the child scope will only affect the value on the child scope and will not affect the value on the parent scope; if you need the parent scope and If subscopes share a value, you need to use the latter one, that is, the value on the scope is an object. Modifications on either side can affect the other side. This is because objects in js are reference types.
Basic types
function Sandcrawler($scope) { $scope.location = "Mos Eisley North"; $scope.move = function(newLocation) { $scope.location = newLocation; } } function Droid($scope) { $scope.sell = function(newLocation) { $scope.location = newLocation; } }
html:
<p ng-controller="Sandcrawler"> <p>Location: {{location}}</p> <button ng-click="move('Mos Eisley South')">Move</button> <p ng-controller="Droid"> <p>Location: {{location}}</p> <button ng-click="sell('Owen Farm')">Sell</button> </p> </p>
Object
function Sandcrawler($scope) { $scope.obj = {location:"Mos Eisley North"}; } function Droid($scope) { $scope.summon = function(newLocation) { $scope.obj.location = newLocation; } }
html: reee
<p ng-controller="Sandcrawler"> <p>Sandcrawler Location: {{location}}</p> <p ng-controller="Droid"> <button ng-click="summon('Owen Farm')"> Summon Sandcrawler </button> </p> </p>
function Sandcrawler($scope) { $scope.location = "Mos Eisley North"; $scope.$on('summon', function(e, newLocation) { $scope.location = newLocation; }); } function Droid($scope) { $scope.location = "Owen Farm"; $scope.summon = function() { $scope.$emit('summon', $scope.location); } }
<p ng-controller="Sandcrawler"> <p>Sandcrawler Location: {{location}}</p> <p ng-controller="Droid"> <p>Droid Location: {{location}}</p> <button ng-click="summon()">Summon Sandcrawler</button> </p> </p>
function Sandcrawler($scope) { $scope.location = "Mos Eisley North"; $scope.recall = function() { $scope.$broadcast('recall', $scope.location); } } function Droid($scope) { $scope.location = "Owen Farm"; $scope.$on('recall', function(e, newLocation) { $scope.location = newLocation; }); }
<p ng-controller="Sandcrawler"> <p>Sandcrawler Location: {{location}}</p> <button ng-click="recall()">Recall Droids</button> <p ng-controller="Droid"> <p>Droid Location: {{location}}</p> </p> </p>
function Sandcrawler($scope) { $scope.$on('requestDroidRecall', function(e) { $scope.$broadcast('executeDroidRecall'); }); } function Droid($scope) { $scope.location = "Owen Farm"; $scope.recallAllDroids = function() { $scope.$emit('requestDroidRecall'); } $scope.$on('executeDroidRecall', function() { $scope.location = "Sandcrawler" }); }
<p ng-controller="Sandcrawler"> <p ng-controller="Droid"> <h2>R2-D2</h2> <p>Droid Location: {{location}}</p> <button ng-click="recallAddDroids()">Recall All Droids</button> </p> <p ng-controller="Droid"> <h2>C-3PO</h2> <p>Droid Location: {{status}}</p> <button ng-click="recallAddDroids()">Recall All Droids</button> </p> </p>
var app = angular.module('myApp', []); app.factory('instance', function(){ return {}; }); app.controller('MainCtrl', function($scope, instance) { $scope.change = function() { instance.name = $scope.test; }; }); app.controller('sideCtrl', function($scope, instance) { $scope.add = function() { $scope.name = instance.name; }; });