Heim > Artikel > Backend-Entwicklung > javascript - Broadcast und on werden in Angular verwendet. Warum wird der Code in on nicht jedes Mal erfolgreich ausgeführt?
<code>var app = angular.module('gzmu', ["ngRoute",'chart.js']); app.run(function ($rootScope, $http) { $http({ method: 'GET', url: 'datacon/user_info.php', }).success(function (response) { $rootScope.userinfo = response[0]; console.log($rootScope.userinfo) $rootScope.$broadcast("userinfo", response[0]); }) }); app.controller('data', function ($scope, $http, $rootScope) { $scope.usernamea=''; $scope.$on("userinfo", function (event, msg) { console.log(msg); if(msg){ $scope.usernamea = msg.user; console.log($scope.usernamea) alert($scope.usernamea) } else{ alert(msg) } }); });</code>
Wie bereits erwähnt, warum wird der Code nicht jedes Mal ausgeführt, wenn die Seite geladen wird?
<code>var app = angular.module('gzmu', ["ngRoute",'chart.js']); app.run(function ($rootScope, $http) { $http({ method: 'GET', url: 'datacon/user_info.php', }).success(function (response) { $rootScope.userinfo = response[0]; console.log($rootScope.userinfo) $rootScope.$broadcast("userinfo", response[0]); }) }); app.controller('data', function ($scope, $http, $rootScope) { $scope.usernamea=''; $scope.$on("userinfo", function (event, msg) { console.log(msg); if(msg){ $scope.usernamea = msg.user; console.log($scope.usernamea) alert($scope.usernamea) } else{ alert(msg) } }); });</code>
Wie bereits erwähnt, warum wird der Code nicht jedes Mal ausgeführt, wenn die Seite geladen wird?
Der Hauptgrund ist, dass die Übertragung während der Ausführung der App tatsächlich ein asynchroner Vorgang ist. Wenn der Datencontroller während der Ausführung erfolgreich angefordert und vor der Übertragung erstellt wird, wird er erfolgreich aufgerufen, andernfalls erhält er die Informationen nicht von der Wurzel gesendet