angular : direative :通讯

在网络上可以找到多种指令之间的通讯

· $on,$emit,$boardcast (向上或向下冒泡)

· 指令return的required (^)向上一个scope通讯,前提要先给scope一个name

· 建立一个factory,让需要通讯的指令依赖注入factory服务

以上都可以解决通讯问题,但是在不同的状况下还是会遇到代码阅读上的问题

今天遇到的问题是当指令A的child的指令B要和指令A通讯,同时指令C(不在指令A的child)要和指令A通讯

最终决定使用$on和$boardcast的方法

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>思涂客 Stooges</title>
    <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.18/angular.min.js"></script>

    <script>
        angular.module("app", []).
            directive("myParent", [function () {
                return {
                    restrict: "E",
                    link: function (scope) { },
                    controller: ["$scope", function ($scope) {
                        var that = this;
                        $scope.name = "parent";
                        that.alert = function () {
                            $scope.name = "alert";
                        }
                        $scope.$on("Main.myParent.alert", function (e, fn) {
                            fn(that);
                        });
                    }],
                    scope: true,
                    name: "myParent"
                }
            }]).
            directive("myChild", [function () {
                return {
                    restrict: "E",
                    require: "^myParent",
                    link: function (scope, elem, attrs, myParent) {
                        //myParent.alert();
                    }
                }
            }]).
            directive("myOutputSide", ["$rootScope", function ($rootScope) {
                return {
                    restrict: "E",
                    link: function (scope, elem, attrs) {
                        $rootScope.$broadcast("Main.myParent.alert", function (scope) {
                            scope.alert();
                        });
                    }
                }
            }]);

    </script>

</head>
<body ng-app="app">
    <my-parent data-xx="{{name}}">
        <my-child></my-child>
    </my-parent>
    <my-output-side></my-output-side>
</body>
</html>

myParent 指令A

myChild 指令B

myOutputSide 指令C

指令A和指令B通讯方法:在指令A给ctrl一个name,这样在指令B就可以通过required调用指令A的ctrl

指令A和指令C通讯方法:在指令C依赖注入$rootscope,然后向下冒泡找到Main.myParent.alert,这在指令A是写好,同时需要一个参数scope。这样就能很好的通讯了,如果指令B和C都要改变指令A的scope,通过以上方法可以到达不重复代码

时间: 2024-10-21 14:47:09

angular : direative :通讯的相关文章

angular : direative : scope 指令scope和transclude的关系

今天记入的是指令的scope和transclude关系 a 和 b 都是指令 <div a> <div b></div> </div> a transclude了b,b的$$prevSibling是a,而a的$$prevSibling不是b <div a> <div ng-transclude=""> <div b></div> </div> </div> angul

angular : direative : autoResize

今天为大家推出自己的auto resize 指令功能. 目的:解决textarea在给height的问题. 参考源码:http://monospaced.github.io/angular-elastic/elastic.js 参考网站:http://plnkr.co/edit/9y6YLriAwsK9hqdu72WT?p=preview <script> angular.module("Stooges", []). directive("autoResize&q

angular : direative : scope | 指令scope里的符号@,=

先看看以下的代码 <body ng-app="app" ng-controller="ctrl"> <dir myname="name"></dir> <script src="js/angular.js"></script> <script> var app = angular.module("app", []); app.contr

Angular组件之间通讯

组件之间会有下列3种关系: 1. 父子关系 2. 兄弟关系 3. 没有直接关系 通常采用下列方式处理(某些方式是框架特有)组件间的通讯,如下: 1父子组件之间的交互(@Input/@Output/模板变量/@ViewChild) 2非父子组件(Service/localStorage) 3还可以利用Session等服务器端的解决方法 Angular组件间通讯方法: 1.父子组件之间的通讯 @Input:是属性绑定,父组件向子组件传递数据 @Output:是事件绑定,子组件向父组件传递数据的同时触

Angular 学习笔记——模块之间的通讯

<!DOCTYPE HTML> <html ng-app="myApp"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>无标题文档</title> <script src="angular.min.js"></scrip

Angular 4+ HttpClient

这篇,算是上一篇Angular 4+ Http的后续: Angular 4.3.0-rc.0 版本已经发布??.在这个版本中,我们等到了一个令人兴奋的新功能 - HTTPClient API 的改进版本: HttpClient 是已有 Angular HTTP API 的演进,它在一个单独的 @angular/common/http 包中.这是为了确保现有的代码库可以缓慢迁移到新的 API: 大多数前端应用都需要通过 HTTP 协议与后端服务器通讯.现代浏览器支持使用两种不同的 API 发起 H

controller 和 指令 通讯方法

在 angular 中我们经常会使用多个 controller 和 指令 他们拥有各自的 $scope , 这就产生了跨$scope调用的问题. 有几种常见的方法来可以使用. 方法一 : 指令 require <div directive1="xx"> <div directive2></div> </div> directive("directive1", [function () { return { restri

半小时入门Angular 2

本文首发于由电子工业出版社出版<揭秘Angular 2>一书,基于第5章概览改写. 作者简介:广发证券互联网金融技术团队,是Angular早期坚定的践行者.作为全新一代的证券业 IT 研发组织,团队致力于用更新更好的技术打造行业方案.支持业务创新. 责编:陈秋歌,寻求报道或者投稿请发邮件至chenqg#csdn.net,或加微信:Rachel_qg. 了解更多前沿技术资讯,获取深度技术文章推荐,请关注CSDN研发频道微博. Angular 2.0 于去年 9 月正式发布. 尽管同一时间里 Re

Angular 中得 scope 作用域梳理

$scope 的使用贯穿整个 Angular App 应用,它与数据模型相关联,同时也是表达式执行的上下文.有了 $scope 就在视图和控制器之间建立了一个通道,基于作用域视图在修改数据时会立刻更新 $scope,同样的 $scope 发生改变时也会立刻重新渲染视图. 有了 $scope 这样一个桥梁,应用的业务代码可以都在 controller 中,而数据都存放在controller 的 $scope 中. $rootScope Angular 应用启动并生成视图时,会将根 ng-app 元