首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

AngularJS进阶(九)控制器controller之间如何通信

  • 23-11-14 10:02
  • 3760
  • 5053
blog.csdn.net

AngularJS控制器controller之间如何通信

注:请点击此处进行充电!

angular控制器通信的方式有三种:

 1,利用作用域继承的方式。即子控制器继承父控制器中的内容

 2,基于事件的方式。即$on,$emit,$boardcast这三种方式

 3,服务方式。写一个服务的单例然后通过注入来使用

利用作用域的继承方式

由于作用域的继承是基于js的原型继承方式,所以这里分为两种情况,当作用域上面的值为基本类型的时候,修改父作用域上面的值会影响到子作用域,反之,修改子作用域只会影响子作用域的值,不会影响父作用域上面的值;如果需要父作用域与子作用域共享一个值的话,就需要用到后面一种,即作用域上的值为对象,任何一方的修改都能影响另一方,这是因为在js中对象都是引用类型。

基本类型

  1. function Sandcrawler($scope) {
  2. $scope.location = "Mos Eisley North";
  3. $scope.move = function(newLocation) {
  4.     $scope.location = newLocation;
  5. }
  6. };
  7. function Droid($scope) {
  8. $scope.sell = function(newLocation) {
  9. $scope.location = newLocation;
  10. }
  11. }
  12. // html
  13. "Sandcrawler">
  14. <p>Location: p>
  15. <button ng-click="move('Mos Eisley South')">Movebutton>
  16. <div ng-controller="Droid">
  17.     <p>Location: p>
  18.     <button ng-click="sell('Owen Farm')">Sellbutton>
  19. div>

基于事件的方式

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

angular服务的方式

在ng中服务是一个单例,所以在服务中生成一个对象,该对象就可以利用依赖注入的方式在所有的控制器中共享。

  1. var app = angular.module('myApp', []);
  2. //使用factory API创建服务instance
  3. app.factory('instance', function(){
  4. return {};
  5. });
  6. app.controller('MainCtrl', function($scope, instance) {
  7. $scope.change = function() {
  8. instance.name = $scope.test;
  9. };
  10. });
  11. app.controller('sideCtrl', function($scope, instance) {
  12. $scope.add = function() {
  13. $scope.name = instance.name;
  14. };
  15. });
  16. //html
  17. <div ng-controller="MainCtrl">
  18. <input type="text" ng-model="test" />
  19. <div ng-click="change()">click mediv>

注:本文转载自blog.csdn.net的No Silver Bullet的文章"http://blog.csdn.net/sunhuaqiang1/article/details/49950813#t3"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top