在Angular中,从分离视图控制器中改变事件的作用域变量
Changing scope variables on events from a separates view's controller in Angular?
假设您有一个登录系统,其中导航位于"主"视图中,该视图永远不会更改,它还包含一个占位符ng-model用于用户名:
$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);
}
你可以看看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文档:
rootScope.Scope美元https://docs.angularjs.org/api/ng/type/事件生命周期从$broadcast所在的作用域开始调用。在此范围内侦听name事件的所有侦听器都得到收到通知。之后,事件传播到所有直接和间接当前作用域的作用域,并同时调用所有已注册的侦听器的方式。事件无法取消。
相关文章:
- 当一个单元格被编辑时,是否有一个事件触发,但值没有'不要改变
- 纯JavaScript中的Onclick滑块 - 事件不会改变CSS值
- 如何正确地改变输入表单的值以引起“注意”;改变“;事件
- 改变布局的Javascript/jQuery focusout事件导致点击事件不触发
- 当下拉选择通过模型改变时,如何触发jquery事件
- 使用点击事件来改变“;焦点”;
- 触发标准“;改变“;表单对象上的事件-由其上的任何侦听器拾取
- Marionette ItemView不发射“;改变“;事件
- 为什么jquery"改变“;事件在我的示例中不起作用
- "keydown”;以及“;改变“;事件不适用于jquery数据表
- 使用jQueryUI手风琴并在事件改变为在新的“;窗格”;
- JavaScript:用onclick事件改变webgl的纹理
- Knockout js valueupdate 'afterkeydown'事件改变不起作用
- Jquery事件改变内联背景颜色的图像
- 使用Jquery悬停事件改变css
- 使用Kefir用多个事件改变属性的惯用方法
- 三个下拉事件改变不工作
- 使用拖放事件改变形状
- 使用Onload事件改变HTML上的iframe事件
- 通过javascript点击事件改变wordpress主题