首页 > 语言 > JavaScript > 正文

Angularjs实现控制器之间通信方式实例总结

2024-05-06 15:20:23
字体:
来源:转载
供稿:网友

本文实例讲述了Angularjs实现控制器之间通信方式。分享给大家供大家参考,具体如下:

利用angularjs开发项目中,控制器之间的通信,比如参数的传递,数据的传递,都是比较常见的。控制器之间的通信,显得尤为重要。常见的方式有如下两种:一、angular服务的方式;二、基于事件广播的方式;另外,还有基于作用域继承的方式。下面先说一下前两种方式:

一、基于angular服务的方式:

在angular中服务是一个单例,所以在服务中生成一个对象,该对象就可以利用依赖注入的方式在所有的控制器中共享。参照以下例子,在一个控制器修改了服务对象的值,在另一个控制器中获取到修改后的值:

var app = angular.module('myApp', []);app.factory('Myservice', function(){ return {};});//定义服务app.controller('Ctrltest1', function($scope, 'Myservice') { $scope.change = function() {  Myservice.name = $scope.test; //在第一个控制器中为服务对象赋值 };});app.controller('Ctrltst2', function($scope, 'Myservice') { $scope.add = function() {  $scope.name = Myservice.name; //将第一个控制器中为服务对象赋的值传给第二个控制器 };});
<div ng-controller='Ctrltest1'>  <input type="text" ng-model="test" />  <div ng-click="change()">click me</div></div><div ng-controller='Ctrltest2'> <div ng-click="add()">my name {{name}}</div></div>

二、基于事件广播的方式

基于事件广播,需要用到$emit()$broadcaset()$emit()这三个方法。

1. 向父作用域层次结构发出自定义事件:使用$emit()方法,scope.$emit(name,[args,...])

注:name是事件名,args 是0个或多个参数。

应用场景:用于子页面控制器向父页面的控制器传递参数。

2. 向子作用域层次结构广播自定义事件:

应用场景:用于父页面控制器向子页面的控制器传递参数或者同级控制器之间传递参数。

使用$broadcaset()方法,$scope.$broadcaset(name,[args,...])

注:name是事件名,args 是0个或多个参数.

3. 使用侦听器处理自定义事件

为了处理发出或广播的事件,可以使用$on()方法。$on()方法将使用下面的语法:

$scope.$on(name,listener)

注:name 是将要侦听的事件的名字,listener参数是一个函数,它将接受事件作为第一个参数,接受$emit()或者$broadcaset()方法传递的其他所有参数作为随后的参数。$on()方法主要用于监听$emit()$broadcaset()方法中事件的变化,例如这两个方法中如果有变量发生改变,$on()方法将会获取到该变量的改变。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选