Javascript 从分离视图更改事件的范围变量';角速度控制器?
假设您有一个登录系统,其中导航位于“主”视图中,并且永不更改,它还包含一个用于用户名的占位符ng模型:Javascript 从分离视图更改事件的范围变量';角速度控制器?,javascript,angularjs,Javascript,Angularjs,假设您有一个登录系统,其中导航位于“主”视图中,并且永不更改,它还包含一个用于用户名的占位符ng模型: $scope.userName = Session.userName(); 然而,这是被分配一旦页面加载,这是坏的。如何使登录控制器在$http请求返回成功后立即在maincontroller上更改此变量 $scope.login = function() { $http.post('http://restfulservice.com', angu
$scope.userName = Session.userName();
然而,这是被分配一旦页面加载,这是坏的。如何使登录控制器在$http请求返回成功后立即在maincontroller上更改此变量
$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);
}
您可以查看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的作用域开始
打电话。在此作用域上侦听name事件的所有侦听器都将获取
通知。之后,事件会传播到所有直接和间接事件
并调用所有已注册的侦听器
顺便说一下。无法取消该事件
$rootScope.Scope使用服务将是更好的选择..只需更新服务变量将反映所有地方..注意服务数据应该在对象中..只有一个问题,因为我以前见过编写这些事件,但是“用户登录”做什么?它从哪里来,有什么用?我可以理解$stateChangestart将取代它,但这似乎是自定义的。
用户登录
只是为事件指定的名称,因此任何想要订阅此事件的人都可以使用此事件名称。