• angular : direative :comunication 指令之间的通讯


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

    · $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>
    View Code

    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,通过以上方法可以到达不重复代码

  • 相关阅读:
    Python—Socket
    python-—计算器
    Python—I-O多路复用
    Python—redis
    《Python数据分析常用手册》一、NumPy和Pandas篇
    python--Selenium-模拟浏览器
    python--selenium简单模拟百度搜索点击器
    关于selenium实现滑块验证
    python 读写、创建 文件的方法(必看)
    Python 爬虫的工具列表大全
  • 原文地址:https://www.cnblogs.com/stooges/p/3930448.html
Copyright © 2020-2023  润新知