javascript - Changing scope variables on events from a separates view's controller in Angular? -
say have login system, nav in on "main" view never changes, contains placeholder ng-model user's name:
$scope.username = session.username();
however, being assigned page loads, , that's bad. how make login controller changes variable on maincontroller $http request returns successful?
$scope.login = function() { $http.post('http://restfulservice.com', angular.tojson($scope.loginuser)) .success( function (data, status, headers, config) { if (data.out) { var data= json.parse(data.out); session.username(data.nombre); session.memorizarid(datos.idcliente); session.memorizarlogged(true); }
you can take @ angularjs eventing mechanism $broadcast
, $emit
.
once login successful can broadcast message , whichever controller listening message broadcasted message , act accordingly.
$scope.login = function() { $http.post('http://restfulservice.com', angular.tojson($scope.loginuser)) .success( function (data, status, headers, config) { if (data.out) { var data= json.parse(data.out); session.username(data.nombre); session.memorizarid(datos.idcliente); session.memorizarlogged(true); //broadcast message passing user info optionally $rootscope.$broadcast('user-logged-in', data); }
inside maincontroller
$rootscope.$on('user-logged-in', function (user) { $scope.username = session.username(); //or using broadcasted user object $scope.username = user.nombre; });
from angularjs documentation:
the event life cycle starts @ scope on $broadcast called. listeners listening name event on scope notified. afterwards, event propagates direct , indirect scopes of current scope , calls registered listeners along way. event cannot canceled.
https://docs.angularjs.org/api/ng/type/$rootscope.scope
Comments
Post a Comment