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

这篇文章主要介绍了angularjs实现控制器之间通信方式,结合实例形式总结分析了angularjs控制器常用通信方式及相关操作注意事项,需要的朋友可以参考下

本文实例讲述了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; //将第一个控制器中为服务对象赋的值传给第二个控制器 };});

登录后复制

    

click me

 

my name {{name}}

登录后复制

二、基于事件广播的方式

基于事件广播,需要用到$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()方法将会获取到该变量的改变。

参照以下例子,在一个控制器修改了变量的值,在另一个控制器中会侦听到修改后的值,并根据修改后的值,做出响应。

app.controller('versiontaskCtrl', function WriteTestcaseCtrl($scope, $cookies, $rootScope, $modal, $stateParams, ui, searchVariable, currentuserversions,) { $scope.taskId = $cookies['edit_taskId']; $scope.versionid = parseInt($cookies['edit_versionId']); $scope.versionName = $cookies['edit_versionName']; $scope.version = $scope.versionid; getuserversions = function () {  currentuserversions.get(function (res) {   $scope.versions = res;  }); }; reload = function () {  getuserversions(); }; $scope.changeVersionid = function (v) {  console.log(v);  $scope.$broadcast('versionidChange', $scope.versionid); //向其他控制器广播$scope.versionid值的变化。 }; reload();});

登录后复制

第二个控制器中监听第一个控制器中的广播事件:

app.controller('SchemeTaskEditableRowCtrl', function ($scope, $rootScope, $cookies, $filter, $http, $window, $stateParams, basetasksService, schemetasksService, UserService) { $scope.taskId = $cookies['edit_taskId']; $scope.versionid = $cookies['edit_versionId']; $scope.version = $scope.versionid; var userid = $rootScope.user.userid; $scope.schemetask = []; $scope.basetask = []; $scope.result = []; $scope.$on('versionidChange', function (event, versionid) {  $scope.versionid = versionid; //监听到$scope.versionid值的变化。然后调用 $scope.schemeTask()和$scope.getUsers()这两个方法  $scope.schemeTask();  $scope.getUsers(); }); $scope.schemeTask = function () {  $scope.tasks = [];  $scope.schemetask = [];  schemetasksService.get({version: $scope.versionid}, function (res) {   $scope.schemetask_collection = res.results;   //console.log($scope.schemetask_collection);   $scope.schemetask_displayed = [].concat($scope.schemetask_collection);   var i = 1;   angular.forEach($scope.schemetask_collection, function (item) {    item['director'] = "app.writetestitem" + "({taskid:" + item.id + "})";    item['number'] = i;    i++;    $scope.schemetask.push(item);   });   $scope.tasks = $scope.schemetask;  }); }; $scope.getUsers = function () {  UserService.get(function (res) {   $scope.users = res.results;   $scope.usersDisplayed = [].concat($scope.users);   $scope.itemArray = [];   $scope.userArray = [];   $scope.names = [];   angular.forEach($scope.users, function (item) {    $scope.itemArray.push(item);    $scope.userArray.push(item.name + item.number);    var itemname = {'name': item.name, 'number': item.number};    $scope.names.push(itemname);   });   $scope.selected = $scope.users;  }); };});

登录后复制

上面是我整理给大家的,希望今后会对大家有帮助。

相关文章:

Jquery具体实例介绍AJAX何时用,AJAX应该在什么地方用

jquery与php结合实现AJAX长轮询

初步了解JavaScript,Ajax,jQuery,并比较三者关系

以上就是Angularjs实现控制器之间通信方式实例总结的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2754988.html

(0)
上一篇 2025年3月8日 07:06:45
下一篇 2025年3月1日 14:14:22

AD推荐 黄金广告位招租... 更多推荐

相关推荐

发表回复

登录后才能评论