最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

Angularjs实现控制器通信步骤详解

来源:动视网 责编:小采 时间:2020-11-27 19:50:00
文档

Angularjs实现控制器通信步骤详解

Angularjs实现控制器通信步骤详解:这次给大家带来Angularjs实现控制器通信步骤详解,Angularjs实现控制器通信的注意事项有哪些,下面就是实战案例,一起来看一下。利用angularjs开发项目中,控制器之间的通信,比如参数的传递,数据的传递,都是比较常见的。控制器之间的通信,显得尤为重要。
推荐度:
导读Angularjs实现控制器通信步骤详解:这次给大家带来Angularjs实现控制器通信步骤详解,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; //将第一个控制器中为服务对象赋的值传给第二个控制器
 };
});
<p ng-controller='Ctrltest1'>
 <input type="text" ng-model="test" />
 <p ng-click="change()">click me</p>
</p>
<p ng-controller='Ctrltest2'>
 <p ng-click="add()">my name {{name}}</p>
</p>

二、基于事件广播的方式

基于事件广播,需要用到$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;
 });
 };
});

相信看了本文案例你已经掌握了方法,更多精彩请关注Gxl网其它相关文章!

推荐阅读:

Angular使用ng-click同时上传多个参数

Angular有哪些方法可以实现字母大小写转换

文档

Angularjs实现控制器通信步骤详解

Angularjs实现控制器通信步骤详解:这次给大家带来Angularjs实现控制器通信步骤详解,Angularjs实现控制器通信的注意事项有哪些,下面就是实战案例,一起来看一下。利用angularjs开发项目中,控制器之间的通信,比如参数的传递,数据的传递,都是比较常见的。控制器之间的通信,显得尤为重要。
推荐度:
标签: 方法 通讯 详解
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top