假设你有一个登录系统,导航系统位于" main"从不改变的视图,它还包含用户名称的占位符ng模型:
$scope.userName = Session.userName();
但是,只要页面加载就会分配,但这很糟糕。如果$ http请求返回成功,我将如何使登录控制器在主控制器上更改此变量?
$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);
}
答案 0 :(得分:0)
您可以查看angularJs事件处理机制$broadcast
和$emit
。
登录成功后,您可以广播一条消息,无论哪个控制器正在收听此消息,它都会收到广播消息并采取相应行动。
$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 the message passing the user info optionally
$rootScope.$broadcast('user-logged-in', data);
}
内部主控制器
$rootScope.$on('user-logged-in', function (user) {
$scope.userName = Session.userName();
//Or using the broadcasted user object
$scope.userName = user.Nombre;
});
来自angularJs文档:
事件生命周期从$ broadcast的范围开始 调用。所有侦听此范围内的名称事件的侦听器都会获得 收到通知。之后,事件传播到所有直接和间接 当前范围的范围并调用所有已注册的侦听器 方式。该活动无法取消。
https://docs.angularjs.org/api/ng/type/ $ rootScope.Scope