美文网首页
AngularJS指令的交互

AngularJS指令的交互

作者: RelaxedAndHappy | 来源:发表于2017-05-23 00:21 被阅读0次

指令与单个控制器的交互:

<body ng-app="myApp">
    <div ng-controller="myCtrl">
            <hello>滑动加载</hello> 
    </div>
    <script type="text/javascript">
        var app = angular.module("myApp", []);
        //添加控制器
            app.controller("myCtrl", function($scope) {
                $scope.loadData = function() {
                    console.log("滑动加载成功")
                };
            });
            //添加自定义指令
            app.directive("hello", function() {
                return {
                    restrict: "AE",//属性和元素方式调用指令
                    link: function(scope, element, attrs) {
                        element.bind("mouseenter" ,function() {
                            scope.loadData();
                        });
                    }
                }
            });
    </script>
</body>

指令和多个控制交互:

<body ng-app="myApp">
    <div ng-controller="myCtrl">
            <hello howToLoad="loadData()">滑动加载</hello>  
    </div>
    <div ng-controller="myCtrl2">
        <hello howToLoad="loadData2()">滑动加载22222</hello>
    </div>
    <script type="text/javascript">
        var app = angular.module("myApp", []);
        //添加控制器
            app.controller("myCtrl", function($scope) {
                $scope.loadData = function() {
                    console.log("滑动加载成功")
                };
            });
            app.controller("myCtrl2", function($scope) {
                $scope.loadData2 = function() {
                    console.log("22222加载成功")
                };
            });
            //添加自定义指令
            app.directive("hello", function() {
                return {
                    restrict: "AE",//属性和元素方式调用指令
                    link: function(scope, element, attrs) {
                        element.bind("mouseenter" ,function() {
                            // scope.loadData();
                            // 使用$apply()方法,通过控制器的属性值来控制加载那个方法
                            scope.$apply(attrs.howtoload);//注意这里的属性名写小写即可,不能有存在大小写,系统已经转换过了
                        });
                    }
                }
            });
    </script>
</body>

指令与指令间的交互:

<body ng-app="myApp">
    <div>
        <superman strength>动感超人 ---- 力量</superman>
    </div>
    <div>
        <superman strength speed>动感超人 ---- 力量+速度</superman>
    </div>
    <div>
        <superman strength speed light>动感超人 ---- 力量+速度+光</superman>
    </div>
    <script>
        var app = angular.module("myApp", []);
            //自定义指令
            app.directive("superman", function() {
                return {
                    scope: {},//创建独立作用域
                    restrict: 'AE',
                    controller: function($scope) {//用于暴露给外部调用的方法
                        $scope.abilites = [];
                        this.addStrength = function() {
                            $scope.abilites.push("strength");
                        };
                        this.addSpeed = function() {
                            $scope.abilites.push("speed");
                        };
                        this.addLight = function() {
                            $scope.abilites.push("light");
                        };
                    },
                    //需要暴露给外部调用时,把函数在controller里
                    //link用于处理函数,绑定事件
                    link: function(scope, element, attrs) {
                        element.bind("mouseenter", function() {
                            console.log(scope.abilites)
                        });
                    }
                };
            });

            // 给属性添加指令
            app.directive("strength", function() {
                return {
                    require: "^superman",//表示该指令依赖的对象,require存在时,就可以使用link的第四个参数Ctrl
                    link: function(scope, element, attrs, supermanCtrl) {
                        supermanCtrl.addStrength();
                    }
                }
            });
            app.directive("speed", function() {
                return {
                    require: "^superman",
                    link: function(scope, element, attrs, supermanCtrl) {
                        supermanCtrl.addSpeed();
                    }
                }
            });
            app.directive("light", function() {
                return {
                    require: "^superman",
                    link: function(scope, element, attrs, supermanCtrl) {
                        supermanCtrl.addLight();
                    }
                }
            });
    </script>

解释:
1.自定义指令下的link函数有四个参数:scope,element,attrs和ctrl(关联ctrl)

2.require:请求另外的controller,传入当前directive的link 函数中。require需要传入一个directive controller的名称。如果找不到这个名称对应的controller,那么将会抛出一个error。名称可以加入以下前缀:

     ? - 不要抛出异常。这使这个依赖变为一个可选

      ^ - 允许查找父元素的controller

3.在上面的示例中<superman></superman>指令中添加的strength speed light其实也是指令,是以属性的方式存在的。

4.scope:{}这个是创建一个独立的作用域。

5.controller,这个和我们angular中的控制器有些不同,这个主要是写一些指令的对外方法。

相关文章

  • AngularJS指令的交互

    指令与单个控制器的交互: 指令和多个控制交互: 指令与指令间的交互: 解释:1.自定义指令下的link函数有四个参...

  • AngularJS的基本使用

    AngularJS的基本使用 1 指令 2 angular的方法 3 $scope 中间对象 传递参数 交互体...

  • AngularJs之指令与控制器之间的交互

    指令(directive)是AngularJS核心模块之一,可以实现很多强大的功能,那么指令和多控制器之间的交互是...

  • Angular相关指令

    AngularJS 指令 本教程用到的 AngularJS 指令 : 指令 描述 ng-app 定义应...

  • AngularJS 参考手册

    AngularJS 指令 本教程用到的 AngularJS 指令 : 过滤器解析 AngularJs 过滤器。 A...

  • AngularJS (2)

    AngularJS 指令 AngularJS 指令是扩展的 HTML 属性,带有前缀 ng-。 ng-app 指令...

  • Angular基础学习-01

    本节包括:AngularJS表达式、AngularJS指令、AngularJS模型、AngularJS的Scope...

  • 15. Angular的内置指令(过滤器)

    AngularJS中自定义指令处理 以ng开头的指令都是内置指令。 内置指令是AngularJS已经处理,使用内置...

  • AngularJS 指令

    AngularJS 指令 背景 什么是AngularJS指令? 一、内置指令 二、自定义 概念 模块对象app,提...

  • AngularJS使用

    AngularJS实现MVC AngularJS模块化Module AngularJS指令系统 AngularJS...

网友评论

      本文标题:AngularJS指令的交互

      本文链接:https://www.haomeiwen.com/subject/khzixxtx.html