AngularJs-指令和指令之间的交互(动感超人)

前言:

  上节我们学习到了指令和控制器之间的交互,通过给指令添加动作,调用了控制器中的方法。本节我们学习指令和指令之间是如何交互的,我们通过一个小游戏来和大家一起学习,听大漠老师说这是国外的人写的demo,我们可以借鉴学习。

1,动感超人

  

上面的三个按钮,代表三个超人,在此想问下,哪些想看超人的朋友们是不是有种被骗了的感觉?

当我们的鼠标移动到哪个超人的身上的时候,就会输入这个超人所拥有的超能力(力量 + 敏捷 + 发光)

<!DOCTYPE html>
<html ng-app="MyModule">
<head>
    <meta charset="utf-8">
    <link rel="stylesheet" href="css/bootstrap.min.css">
    <title>指令之间的交互</title>
</head>
<body>
    <div class="row">
        <div class="col-md-3">
            <superman strength>动感超人---力量</superman>
        </div>
        <div class="col-md-3">
            <superman strength speed>动感超人2---力量+敏捷</superman>
        </div>
        <div class="col-md-3">
            <superman strength speed light>动感超人3---力量+敏捷+发光</superman>
        </div>
    </div>
</body>
<script src="js/angular-1.3.0.js"></script>
<script src="js/directive-directive.js"></script>
</html>

ok,我们先创建了四个指令,一个是通过 E 的模式创建的叫做 superman,另外三个是通过 A 模式创建的 (strength、speed和light)。

var myModule = angular.module(‘MyModule‘,[]);
myModule.directive(‘superman‘,function(){
    return{
        scope:{},
        restrict:‘AE‘,
        controller:function($scope){
            $scope.abilities=[];

            this.addStrength=function(){
                $scope.abilities.push("strength");
            };

            this.addSpeed = function(){
                $scope.abilities.push(‘speed‘);
            };

            this.addLight = function(){
                $scope.abilities.push(‘light‘);
            }
        },
        link:function(scope,element,attrs){
            element.addClass(‘btn btn-primary‘);
            element.bind(‘mouseenter‘,function(){
                console.log(scope.abilities);
            })
        }
    }
});
myModule.directive(‘strength‘,function(){
    return{
        require:‘^superman‘,
        link:function(scope,element,attr,supermanCtl){
            supermanCtl.addStrength();
        }

    }
})
myModule.directive(‘speed‘,function(){
    return{
        require:‘^superman‘,
        link:function(scope,element,attr,supermanCtl){
            supermanCtl.addSpeed();
        }
    }
})
myModule.directive(‘light‘,function(){
    return{
        require:‘^superman‘,
        link:function(scope,element,attr,supermanCtl){
            supermanCtl.addLight();
        }
    }
})

上面的代码,最主要的就是 superman的这个指令,里面有些我们还没有认识的元素,我们下面介绍下:

  • scope:{}这个是创建一个独立的作用域。
  • controller,这个和我们angular中的控制器有些不同,这个主要是写一些指令的对外方法。

好,我们再来介绍下面的三个指令,我们就说一个就好了,其它的都一样的。

在这三个控制器也有新增的东西:

  • require:"^superman",这个是告诉angularJS,当前的指令,依赖于哪个指令。我们现在的  strength指令依赖于superman的指令
  • link方法中的第四个参数,叫做父控制器,只要是指令写了require参数,就可以使用这个参数了,它可以访问父级contorller的方法中提供的一些属性和方法。

2,总结

  我们从代码上可以看出,我们的三个超人拥有超能力多少是和拥有的指令多少成正比的。他们都有一个父的指令,父指令提供了超能力的力量(我们可以理解为数据)。子指令控制了是否追加这些功能。

时间: 2024-10-06 04:07:24

AngularJs-指令和指令之间的交互(动感超人)的相关文章

[email&#160;protected]指令与控制器之间的交互demo

1.index.html: <!DOCTYPE HTML><html ng-app="app"><head>    <title>custom-directive</title>    <meta charset="utf-8">        <link rel="stylesheet" href="../css/bootstrap.css">

【angularJS】Directive指令

AngularJS 通过被称为 指令 的新属性来扩展 HTML.指令是扩展的 HTML 属性,带有前缀 ng-. 内置指令 1.ng-app 指令初始化一个 AngularJS 应用程序. 定义了 AngularJS 应用程序的 根元素. 2.ng-init 指令初始化应用程序数据. 通常情况下,不使用 ng-init.您将使用一个控制器或模块来代替它. 3.ng-model 指令把元素值(比如输入域的值)绑定到应用程序[一般是在控制器中定义的变量]. 4.ng-repeat 指令会重复一个 H

【AngularJS】—— 11 指令的交互

    阅读目录 程序分析 全部程序代码: 前面基本了解了指令的相关内容: 1 如何自定义指令 2 指令的复用 本篇看一下指令之间如何交互.学习内容来自<慕课网 指令3> 背景介绍 这例子是视频中的例子,有一个动感超人,有三种能力,力量strength,速度speed,发光light. 这三种能力作为三种属性,定义动感超人作为一个标签,只要添加对应的属性就能拥有该能力. 为了便于结果的展示,为标签添加鼠标的响应事件,当鼠标移动到对应的标签上就会触发一个方法,打印出具备的能力. 回到顶部 程序分

[email&#160;protected]指令与指令之间的交互demo

1.index.html: <!DOCTYPE HTML><html ng-app="app"><head>    <title>custom-directive</title>    <meta charset="utf-8">        <link rel="stylesheet" href="../css/bootstrap.css">

带你走近AngularJS - 创建自定义指令

为什么使用AngularJS 指令? 使用过 AngularJS 的朋友应该最感兴趣的是它的指令.现今市场上的前端框架也只有AngularJS 拥有自定义指令的功能,并且AngularJS 是目前唯一提供Web应用可复用能力的框架. 目前有很多JavaScript 产品提供插件给Web开发人员.例如, Bootstrap 就是当前比较流行的提供样式和JavaScript插件的前端开发工具包.但是开发人员在使用Booostrap中的插件时, 必须切换到JavaScript 模式来写 jQuery

angularjs学习之六(angularjs中directive指令的一般编程事件绑定 模板使用等)

angular js 中模板的使用,事件绑定以及指令与指令之间的交互 对应教学视频地址(需翻墙):angularjs教学视频 <!doctype html> <html ng-app="myapp"> <head> <meta charset="utf-8"/> </head> <body ng-controller="ShieldController"> <div&g

AngularJS 学习笔记 -- 指令(Directive)

AngularJS 指令学习笔记 AngularJS怎样处理指令其实是依赖于指令定义时返回的对象属性的,所以要想深入理解如何定义一个指令,首相需要理解指令定义时各个参数的含义. 完整的AngularJS指令参数 angular.module('app', []) .directive('demoDirective', function (){ // 依据官方规范,指令的定义时应该严格遵循驼峰式命名规则,使用时采用'-'连接单词 return { restrict : String in ['E'

走进AngularJs(五)自定义指令----(下)

自定义指令学习有段时间了,学了些纸上谈兵的东西,还没有真正的写个指令出来呢...所以,随着学习的接近尾声,本篇除了介绍剩余的几个参数外,还将动手结合使用各参数,写个真正能用的指令出来玩玩. 我们在自定义指令(上)中,写了一个简单的<say-hello></say-hello>,能够跟美女打招呼.但是看看人家ng内置的指令,都是这么用的:ng-model="m",ng-repeat="a in array",不单单是作为属性,还可以赋值给它,与

探讨angularJS中指令与指令的通信

指令这节是最难也是最重要的一节,接下来我们来学习一下指令和指令之间是如何通信的. 一.我们要实现的效果如下: 二.源码示例 控制器部分代码示例 /* * accordion可折叠扩展菜单示例 * 涉及指令嵌套,指令与指令之间的通信 */ myDirec.controller("SomeController2",function($scope) { $scope.expanders = [{ title : 'Click me to expand', text : 'Hi there f