`

AngularJS实战之Controller之间的通信

阅读更多
我们时常会在不同controller之间进行通信,接下来就介绍三种controller之间的通信方式

一、使用$on、$emit和$broadcast进行controller通信
虽然AngularJS是不推荐使用嵌套controller的使用,但是会有场景使用到父子controller传值的情况
$on、$emit和$broadcast使得event、data在controller之间的传递变的简单。
$emit:子传父  传递event与data
$broadcast:父传子 child controller传递event与data
$on:监听或接收数据。。用于接收event与data

例子:
<body>
	<div ng-controller="parentController">
		<div ng-click="parent_onclick()" style="background-color: green;">我是父亲{{parent}}</div>
		<div ng-controller="childController">
			<div ng-click="child_onclick()" style="background-color: red;">我是子集{{child}}</div>
		</div>
	</div>
</body>
<script type="text/javascript" src="../plugins/angular/angular.js"></script>
<script type="text/javascript">
	var lxApp = angular.module("lxApp", []);
	lxApp.controller("parentController", function($scope) {
			$scope.$on("sendParent", function(event, data) {
				$scope.parent = data;
			});
		$scope.parent_onclick = function() {
			$scope.$broadcast('sendChild', '我给子控制器传递数据');
		};
	}).controller("childController", function($scope) {
		$scope.$on("sendChild", function(event, data) {
			$scope.child = data;
		});
		$scope.child_onclick = function() {
			$scope.$emit('sendParent', '我给父级传递数据');

		};
	});
</script>

你会发现点击父级的div会使用$scope.$broadcast传递'sendChild'到子集,子集也会使用$on来监听父级传递的值。熟悉一下即可使用这种传值方式。


二、使用SERVICES(服务)来实现值的传递

我们首先来创建一个module(模块)
var lxApp = angular.module("lxApp", []);


接下来创建一个新的服务,服务里面定义一个鱼的数组,然后在使用addFish 方法添加鱼

lxApp.service('lxAppService', function($rootScope) {
		var service = {
			fishs : [ {
				title : "鲨鱼",
				area : "sea"
			}, {
				title : "鲸鱼",
				area : "sea"
			} ],
			addFish : function(fish) {
				service.fishs .push(fish);
			}
		};
		return service;
	});

接下来是controller和html的创建

<div ng-controller="parentController">
		<div ng-click="parent_onclick()" style="background-color: green;">我要向大海添加鱼</div>
		<div ng-controller="childController">
			<div ng-click="child_onclick()" style="background-color: red;">我要获得鱼</div>
		</div>
	</div>


 lxApp.controller("parentController", function($scope,lxAppService) {
		$scope.parent_onclick = function() {
			lxAppService.addFish({
				title : "海豚",
				area : "sea"
			} );
			alert(lxAppService.fishs);
		};
	}).controller("childController", function($scope,lxAppService) {
		$scope.child_onclick = function() {
			alert(angular.toJson(lxAppService.fishs));

		};
	}); 


展示点击父级的div调用父作用域的方法添加鱼,点击子集调用子集作用域的方法获得鱼



三、使用作用域进行controller的通信

div:
<div ng-controller="parentController">
		<div  style="background-color: green;">我是父级</div>
		<div ng-controller="childController">
			<div ng-click="child_onclick()" style="background-color: red;">我是获得父级的名字</div>
		</div>
	</div>


controller:
 lxApp.controller("parentController", function($scope) {
			$scope.name="1212";
	}).controller("childController", function($scope,$rootScope) {
		$scope.child_onclick = function() {
			alert($scope.name);

		};
	}); 


效果




这里我们会看到在父级定义的name在子集里面也可以获取到,这是AngularJS作用域机制,当我们调用子集的方法打印$scope.name,这时候会一直往父级向上的作用域中到$rootScope找name,所以这时候会打印出name。
最后就是可以使用根作用域$rootScope来获取不同controller的值。


AngularJS监听数组变化

AngularJS的$location基本用法和注意事项

AngularJS 无限滚动加载数据控件 ngInfiniteScroll

AngularJS实战之ng-repeat的详细用法

ng-show和ng-if的区别和使用场景

AngularJS实战之路由ui-view传参

AngularJS实战之filter的使用二

AngularJS实战之filter的使用一

AngularJS实战之路由ui-view
  • 大小: 7.8 KB
  • 大小: 11.7 KB
0
0
分享到:
评论

相关推荐

    AngularJS实战 PDF

    **AngularJS实战PDF**是一本深入探讨AngularJS框架的实战指南,旨在帮助开发者掌握这个强大的JavaScript框架,并在实际项目中应用。AngularJS是由Google维护的一个开源项目,它为构建动态Web应用提供了丰富的功能和...

    angularJS实战

    《AngularJS实战》一书,主要聚焦于这个强大的前端JavaScript框架的应用与实践。AngularJS,由Google维护,是MVC(Model-View-Controller)架构的优秀实现,它极大地简化了网页应用的开发,尤其在数据绑定和依赖注入...

    angularJs权威和精通angularjs

    AngularJS的依赖注入(DI)系统是另一个关键组件,它允许模块之间轻松共享服务,如HTTP通信、路由处理等。开发者无需关心对象如何创建和管理,只需声明所需的服务,框架就会自动提供。 **3. MVC架构:** AngularJS...

    angularJS课件及源码

    这个资源包“angularJS课件及源码”提供了学习AngularJS的基础知识和实战演练,非常适合初学者和希望深入理解AngularJS的开发者。 一、AngularJS基础知识 AngularJS的核心特性包括数据绑定、依赖注入、指令系统和...

    AngularJS实现地区选择

    AngularJS 是一个强大的前端JavaScript框架,由Google维护,...通过学习这个实例,你可以了解到AngularJS的实战应用,并提升在创建交互式UI组件方面的技能。如果你对AngularJS感兴趣,这个案例将是一个很好的学习资源。

    AngularJs权威指南(高清版)

    1. **数据绑定**:AngularJS的核心特性之一,实现了视图和模型之间的双向同步。通过`{{ }}`双括号语法,可以轻松地在HTML中展示和修改数据。 2. **MVC模式**:AngularJS遵循Model-View-Controller架构,将应用程序...

    angularJS权威学习指南手册

    1. **双向数据绑定**:AngularJS的核心特性之一,使得模型和视图之间自动保持同步。任何一方的改变都会立即反映到另一方。 2. **指令**:AngularJS扩展了HTML,通过自定义属性、元素或类来增加新的功能,如ng-repeat...

    AngularJS+理论与实践+PPT+和演示

    AngularJS的核心之一是MVC架构,它将应用分为三个主要部分:模型(Model)、视图(View)和控制器(Controller)。模型存储数据,视图展示数据,而控制器处理用户交互,协调模型和视图之间的通信。这种分层设计提高...

    AngularJS实用开发技巧(推荐)

    5. **控制器间通信**:避免直接互相调用,通过事件机制或服务进行通信。 6. **利用指令复用视图**:自定义指令可以封装重复的视图结构和行为。 7. **$scope结构**:$scope是树形结构,与DOM平行,用于存储应用的状态...

    angularContacts:由AngularJs实现的通讯录

    6. **路由(Routing)**:AngularJs的路由功能可以实现页面间的导航,这在多视图应用中非常重要。在通讯录应用中,可以通过路由来实现联系人列表页面、详情页面和编辑页面之间的切换。 7. **依赖注入(Dependency ...

    angularjs_demoapp1

    《AngularJS实战应用详解——基于angularjs_demoapp1的探索》 AngularJS,作为Google推出的一款前端MVC框架,以其强大的数据绑定和依赖注入特性在Web开发领域占据了一席之地。本文将通过分析名为"angularjs_demoapp...

    angularjs-beginner:angularjs初学者

    通过这个AngularJS初学者课程,您将能够逐步掌握这个强大的框架,为全栈开发之路打下坚实的基础。在学习过程中,建议结合实际项目进行练习,理论与实践相结合,以加深理解和提高技能。祝学习顺利!

    java web 2.0架构开发与项目实战 源代码01

    在本资源中,"java web 2.0架构开发与项目实战 源代码01",我们聚焦于Java Web应用程序的开发,特别是在Web 2.0时代的技术和实践。Web 2.0是一个概念,它强调互联网作为交互式平台,用户参与度更高,社交网络和富...

    Ads-AngularJS-Practical-Project

    **AngularJS实战项目——广告平台** AngularJS,作为一款由Google维护的JavaScript框架,是前端开发中的重要工具,尤其在构建复杂、动态的单页应用(SPA)时表现卓越。本项目“广告-AngularJS-实用-项目”旨在通过...

    Ads-Project-AngularJS:使用 AngularJS 制作的课程项目

    总之,这个AngularJS课程项目提供了一个实战平台,帮助学习者巩固理论知识,提升实际操作能力,对于想要精通AngularJS的开发者来说,这是一个宝贵的资源。通过分析和实现项目中的各个部分,可以全面理解和掌握...

    Angular JS权威教程

    - **服务器通信**: AngularJS支持多种与服务器通信的方式,包括HTTP请求。常见的库如$http提供了方便的接口来发送请求和处理响应。 - **事件(Event)**: 应用程序中发生的各种交互动作,AngularJS提供了多种事件处理...

    Social-Network:Social-Network-AngularJS-Practical-Project

    《AngularJS实战项目:构建社交网络》 在IT行业中,前端开发是不可或缺的一部分,而JavaScript作为最主流的前端编程语言之一,其框架AngularJS更是深受开发者喜爱。本项目"Social-Network:Social-Network-AngularJS...

    geekinangular:Geekin 网络应用程序 angularjs

    3. **服务**:AngularJS 提供了一系列内置服务,如 $http 用于处理 HTTP 请求,$scope 作为控制器与视图间的通信桥梁,$rootScope 为所有作用域提供全局共享的属性。此外,还可以通过工厂函数创建自定义服务,实现...

Global site tag (gtag.js) - Google Analytics