全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

AngularJS开发教程之控制器之间的通信方法分析

本文实例讲述了AngularJS开发教程之控制器之间的通信方法。分享给大家供大家参考,具体如下:

一、指令与控制器之间通信,无非是以下几种方法:

基于scope继承的方式

基于event传播的方式

service的方式(单例模式)

二、基于scope继承的方式:

最简单的让控制器之间进行通信的方法是通过scope的继承。假设有两个控制器Parent、Child,Child 在 Parent 内,那Child 可以称为控制器Parent的子控制器,它将继承父控制器Parent的scope。这样,Child就可以访问到Parent的scope中的所有函数和变量了。

需要注意的是,由于scope的继承是基于Js的原型继承,如果变量是基本类型的,那在Child中的修改(写),有可能会导致Parent中的数据变脏。

例子:

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>基于scope继承的方式</title>
</head>
<body ng-app = "myApp">
  <div ng-controller = "parent">
      <p>引用类型:{{obj.value}}</p>
      <p>引用类型:{{value}}</p>
      <a href="javascript:;" ng-click = "parent('parent')">点我</a>
    <div ng-controller="child">
      <p>引用类型:{{obj.value}}</p>
      <p>引用类型:{{value}}</p>
      <a href="javascript:;" ng-click = "child('child')">点我</a>
    </div>
  </div>
  <script type="text/javascript" src='http://cdn.staticfile.org/angular.js/1.3.0-beta.13/angular.min.js'></script>
  <script>
    var app = angular.module("myApp",[],function(){console.log("start")});
    app.controller("parent",function($scope){
      $scope.parent = function(newchild){
        // 这里不能都单独写成$scope.obj={value:newchild}
        $scope.obj={value:newchild};
        $scope.value = newchild;
      }
    });
    app.controller("child",function($scope){
      $scope.child = function(newchild){
        $scope.value = newchild;
        $scope.obj.value=newchild;
      }
    });
  </script>
</body>
</html>

三、基于事件的方式:

在一般情况下基于继承的方式已经足够满足大部分情况了,但是这种方式没有实现兄弟控制器之间的通信方式,所以引出了事件的方式 。基于事件的方式中我们可以里面作用的on,on,emit,boardcast这几个方式来实现,其中boardcast这几个方式来实现,其中on表示事件监听,emit表示向父级以上的作用域触发事件,emit表示向父级以上的作用域触发事件,boardcast表示向子级以下的作用域广播事件。

子到父 通过 $emit 注册事件,例子:

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>基于事件传播子到父</title>
</head>
<body ng-app = "myApp">
  <h3>$on,$emit,$boardcast这几个方式来实现,其中$on表示事件监听,$emit表示向父级以上的 作用域触发事件, $boardcast表示向子级以下的作用域广播事件</h3>
  <div ng-controller = "parent">
      <p>引用类型:{{value}}</p>
    <div ng-controller="child">
      <a href="javascript:;" ng-click = "child('child')">子传值到父</a>
    </div>
  </div>
  <script type="text/javascript" src='http://cdn.staticfile.org/angular.js/1.3.0-beta.13/angular.min.js'></script>
  <script>
    var app = angular.module("myApp",[],function(){console.log("start")});
    app.controller("parent",function($scope){
      $scope.$on("pfan",function(e,data){
        $scope.value = data;
      })
    });
    app.controller("child",function($scope){
      $scope.child = function(newchild){
        $scope.value = newchild;
        $scope.$emit("pfan",$scope.value)
      }
    });
  </script>
</body>
</html>

父到子通过$broadcast注册事件,但其实感觉有点多余,本事父就是可以共享给子的,例子:

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>基于事件传播父到子</title>
</head>
<body ng-app = "myApp">
  <h3>$on,$emit,$boardcast这几个方式来实现,其中$on表示事件监听,$emit表示向父级以上的 作用域触发事件, $boardcast表示向子级以下的作用域广播事件</h3>
  基于事件传播父到子,这里本事父就可以到子,感觉有点多余
  <div ng-controller = "parent">
      <a href="javascript:;" ng-click = "parent('child')">子传值到父</a>
    <div ng-controller="child">
      <p>引用类型:{{value}}</p>
    </div>
  </div>
  <script type="text/javascript" src='http://cdn.staticfile.org/angular.js/1.3.0-beta.13/angular.min.js'></script>
  <script>
    var app = angular.module("myApp",[],function(){console.log("start")});
    app.controller("parent",function($scope){
      $scope.parent = function(newchild){
        $scope.value = newchild;
        $scope.$broadcast("pfan",$scope.value)
      }
    });
    app.controller("child",function($scope){
      $scope.$on("pfan",function(e,data){
        $scope.value = data;
      })
    });
  </script>
</body>
</html>

同级之间

拥有同个父scope的子级scope之间,也就是兄弟/相邻scope之间的通信,其实是借助共同父级传递消息的:

子级scope中有谁想传消息了,emit一个给“奶爸”然后通过“奶爸”emit一个给“奶爸”然后通过“奶爸”broadcast 给所有孩子这个相同的信息,当然发出信息的那个可以选择是否要忽略掉自己发出的信息

四、angular服务的方式:

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

var app = angular.module('myApp', []);
app.factory('instance', function(){
  return {};
});
app.controller('MainCtrl', function($scope, instance) {
 $scope.change = function() {
    instance.name = $scope.test;
 };
});
app.controller('sideCtrl', function($scope, instance) {
  $scope.add = function() {
    $scope.name = instance.name;
  };
});

html:

<div ng-controller="MainCtrl">
   <input type="text" ng-model="test" />
   <div ng-click="change()">click me</div>
</div>
<div ng-controller="sideCtrl">
  <div ng-click="add()">my name {{name}}</div>
</div>

更多关于AngularJS相关内容感兴趣的读者可查看本站专题:《AngularJS入门与进阶教程》及《AngularJS MVC架构总结》

希望本文所述对大家AngularJS程序设计有所帮助。


# AngularJS  # 控制器  # 通信  # 利用VS Code开发你的第一个AngularJS 2应用程序  # Angularjs单选改为多选的开发过程及问题解析  # AngularJS框架中的双向数据绑定机制详解【减少需要重复的开发代码量】  # 基于NodeJS+MongoDB+AngularJS+Bootstrap开发书店案例分析  # Ubuntu系统下Angularjs开发环境安装  # 总结AngularJS开发者最常犯的十个错误  # 利用Angularjs和Bootstrap前端开发案例实战  # AngularJS应用开发思维之依赖注入3  # angularJS开发注意事项  # 这几个  # 来实现  # 就可以  # 的是  # 是一个  # 进阶  # 器中  # 相关内容  # 中有  # 感兴趣  # 我们可以  # 给大家  # 可以选择  # 最简单  # 更多关于  # 它将  # 所述  # 无非是  # 需要注意  # 程序设计 


相关文章: 定制建站流程解析:需求评估与SEO优化功能开发指南  完全自定义免费建站平台:主题模板在线生成一站式服务  寿县云建站:智能SEO优化与多行业模板快速上线指南  如何制作网站标识牌,动态网站如何制作(教程)?  c++如何打印函数堆栈信息_c++ backtrace函数与符号名解析【方法】  建站之星备案是否影响网站上线时间?  详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)  如何制作一个表白网站视频,关于勇敢表白的小标题?  如何通过WDCP绑定主域名及创建子域名站点?  购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?  建站主机选购指南:核心配置优化与品牌推荐方案  创业网站制作流程,创业网站可靠吗?  如何在云主机快速搭建网站站点?  jQuery 常见小例汇总  如何通过VPS建站实现广告与增值服务盈利?  如何在宝塔面板创建新站点?  如何通过万网虚拟主机快速搭建网站?  哈尔滨网站建设策划,哈尔滨电工证查询网站?  宁波自助建站系统如何快速打造专业企业网站?  建站之星安装后如何自定义网站颜色与字体?  如何使用Golang安装API文档生成工具_快速生成接口文档  如何快速重置建站主机并恢复默认配置?  山东云建站价格为何差异显著?  如何快速上传建站程序避免常见错误?  简单实现Android验证码  建站中国必看指南:CMS建站系统+手机网站搭建核心技巧解析  微信推文制作网站有哪些,怎么做微信推文,急?  常州自助建站工具推荐:低成本搭建与模板选择技巧  Avalonia如何实现跨窗口通信 Avalonia窗口间数据传递  用v-html解决Vue.js渲染中html标签不被解析的问题  专业网站制作服务公司,有哪些网站可以免费发布招聘信息?  深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?  如何安全更换建站之星模板并保留数据?  如何在香港服务器上快速搭建免备案网站?  家具网站制作软件,家具厂怎么跑业务?  微信小程序 input输入框控件详解及实例(多种示例)  如何快速搭建个人网站并优化SEO?  如何有效防御Web建站篡改攻击?  网站制作和推广的区别,想自己建立一个网站做推广,有什么快捷方法马上做好一个网站?  矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?  网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?  外贸公司网站制作哪家好,maersk船公司官网?  如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?  C++如何编写函数模板?(泛型编程入门)  如何实现建站之星域名转发设置?  建站之星安装步骤有哪些常见问题?  如何批量查询域名的建站时间记录?  建站之星客服服务时间及联系方式如何?  网站制作报价单模板图片,小松挖机官方网站报价?  建站三合一如何选?哪家性价比更高? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。