1、指令作用域中的@

作用是把当前属性作为字符串传递。

前台代码:

<div ng-controller="MyCtrl">
       <drink water="{{pureWater}}"></drink>
</div>

Js代码:

<script type="text/javascript">
  var myModule = angular.module("MyModule",[]);

  myModule.controller('MyCtrl', ['$scope', function($scope){
    $scope.pureWater = "纯净水";
  }]);

  myModule.directive("drink",function(){
    return {
      restrict: 'AE',
      scope:{
      water:'@'
      },
      template: "<div>{{water}}</div>"
    }
  });
</script>

执行结果:

(1)HTML页面中,声明一个标签<drink></drink>,其中定义一个属性名:water  属性值:pureWater

(2)JS文件中,首先从模块开始,然后创建一个控制器,再定义一个指令,主要实现的是将"<drink></drink>"替换为"<div>{{water}}</div>"标签显示

(3)重点介绍这里的

scope:{

       water:'@'
}

该表达式等价于:

link:function(scope,element,attrs){

    scope.water=attrs.water;
 }

具体含义就是在指令的scope上定义一个属性名:water,它的值就是前台界面中water属性的值,也就是"{{pureWater}}";

  同时{{pureWater}}的值我们从声明的控制器可以看出:$scope.pureWater="纯净水";

所以最终页面显示的是“纯净水”,主要的流程就是:

  a.在指令中,通过@实现指令与HTML页面元素关联;

  b.在控制器中又实现了与页面的联系;

  c.从而借助HTML页面建立起控制器与指令的联系,也是一种通讯方式。

具体见下图:

2、指令作用域中的=

作用是与父scope中的属性进行双向绑定。

<div ng-controller="MyCtrl">
  Ctrl:
  <br/>
  <input type="text" ng-model="pureWater">
  <br/>
  Directive:
  <br/>
  <drink water="pureWater"></drink>
</div>

Js代码:

<script type="text/javascript">
  var myModule = angular.module("MyModule",[]);

  myModule.controller('MyCtrl', ['$scope', function($scope){
    $scope.pureWater = "纯净水";
  }]);

  myModule.directive("drink",function(){
    return {
      restrict: 'AE',
      scope:{
      water:'='
      },
      template: "<input type="text" ng-model="water" />"
    }
  });
</script>

这里=的手段类似,通过页面设置两个输入框,分别代表指令和控制器的作用域,在JS代码实现了双向绑定,做到了控制器与指令在各自作用域内能够影响对方,也就是双向通信,具体思路与@类似,不赘述,上图:

3、指令作用域中的&

主要作用是传递一个来自父scope的函数,稍后调用。

<div ng-controller="MyCtrl">
  <greeting greet="sayHello(name)"></greeting>
  <greeting greet="sayHello(name)"></greeting>
  <greeting greet="sayHello(name)"></greeting>
</div>

js代码

<script type="text/javascript">
  var myModule = angular.module("MyModule",[]);

  myModule.controller('MyCtrl', ['$scope', function($scope){
    $scope.sayHello = function(name){
      alert("hello" + name);
    }
  }]);

  myModule.directive("greeting",function(){
    return {
      restrict: 'AE',
      scope:{
        greet:'&'
      },
      template: '<input type="text" ng-model="userName" /><br/>' +
        '<button class="btn btn-default" ng-click="greet({name:userName})">Greeting</button><br/>'
    }
  });
</script>

从页面可以看出,这里定义了一个标签<greeting></greeting>,并在其中定义了属性名greet,与上面的@以及=不同的是,属性名后面是一个方法,所以,这里的&主要用于在Controller和directive之间传递函数,实现两者之间的函数通信,在JS中,将前台的greeting标签替换为template中的内容,一个输入框加上一个按钮,按钮上绑定了greet函数,与前台页面的greet相呼应,而前台的greet函数在控制器中有定义,所以指令中也是调用的控制器中的greet函数。执行结果如下:

(1)初始界面

(2)在第一个文本框填值

(3)在第二个文本框填值

(4)在第三个文本框中填值

转自:http://www.cnblogs.com/bigdataZJ/p/AngularJS1.html

自定义指令-directive (转)的更多相关文章

  1. angularjs - 自定义指令(directive)

    自定义指令(directive) 使用 .directive 函数来添加自定义的指令. 要调用自定义指令,HTML 元素上需要添加自定义指令名. 例子:使用驼峰法来命名一个指令, demoDirect ...

  2. vue从入门到进阶:自定义指令directive,插件的封装以及混合mixins(七)

    一.自定义指令directive 除了核心功能默认内置的指令 (v-model 和 v-show),Vue 也允许注册自定义指令.注意,在 Vue2.0 中,代码复用和抽象的主要形式是组件.然而,有的 ...

  3. angularjs自定义指令Directive

    今天学习angularjs自定义指令Directive.Directive是一个非常棒的功能.可以实现我们自义的的功能方法. 下面的例子是演示用户在文本框输入的帐号是否为管理员的帐号"Adm ...

  4. Vue input 控件: 通过自定义指令(directive)使用正则表达式限制input控件的输入

    前言: 网站中的input输入框使用非常广泛,因业务场景不同需要对输入框做合法性校验或限制输入,比如电话号码.邮件.区号.身份证号等.input框的不合法内容主要有两种方式处理:1.用户输入内容后,通 ...

  5. angular 自定义指令 directive transclude 理解

    项目中断断续续的用了下angular,也没狠下心 认真的学习.angular 特别是自定义指令这块 空白. transclude 定义是否将当前元素的内容转移到模板中.看解释有点抽象. 看解释有点抽象 ...

  6. Angular自定义指令directive:scope属性

    在AngularJS中,除了内置指令如ng-click等,我们还可以自定义指令.自定义指令,是为了扩展DOM元素的功能.代码中,通过指定directive中的restrict属性,来决定这个指令是作为 ...

  7. 自定义指令directive

    1.自定义指令 在angular中,module下面的directive方法用于创建自定义指令,用法: m1.directive('myTab',function(){ return { restri ...

  8. angularJs自定义指令.directive==类似自定义标签

    创建自定义的指令 除了 AngularJS 内置的指令外,我们还可以创建自定义指令. 你可以使用 .directive 函数来添加自定义的指令. 要调用自定义指令,HTML 元素上需要添加自定义指令名 ...

  9. vue.js实现内部自定义指令和全局自定义指令------directive

    在Vue中,我们平时数据驱动视图时候,内部自带的指令有时候解决不了一些需求,这时候,Vue给我们一个很好用的东东 directive 这个单词是我们写自定义指令的关键字哦 之定义指令为我们提供了几个钩 ...

  10. vue 自定义指令directive

    //自定义指令:directive 的传参--可以数据也可以是字符串 Vue.directive('scroll', function (binding) { window.addEventListe ...

随机推荐

  1. 【Leetcode】Longest Palindromic Substring

    问题:https://leetcode.com/problems/longest-palindromic-substring/ 给定一个字符串 S,求出 S 的最长回文子串 思路: 1. 回文:一个字 ...

  2. Spring中Bean的作用域

    1.在Spring的早期版本中,仅有两个作用域:singleton和prototype,前者表示Bean以单例的方式存在:后者表示每次从容器中调用Bean时,都会返回一个新的实例 2.Spring 2 ...

  3. iOS PCH文件

    在Xcode6之前,创建一个新的工程,Xcode会再Support Files文件夹下自动创建一个"工程名 - prefix.pch"文件,也是一个头文件,pch文件的内容能被项目 ...

  4. C#中的简单工厂和单例

    下面首先来说说简单工厂 举个例子: 首先是父类 public abstract class Pizza { public abstract string Info(); } } 子类 public c ...

  5. 1.Powershell认识

    Windows PowerShell 是一种命令行外壳程序和脚本环境,自Windows Server 2008开始就有内置于系统当中,有取代CMD之势.管理员使用Powershell完成一些日常重复的 ...

  6. int(*f)(int)

    int(*f)(int): 为指向函数的指针变量的定义方法,其中f为指向函数的指针变量,第一个int为函数返回值类型,第二个int为函数的形参类型.

  7. 小型移动 webApp Demo 知识点整理

    包括内容: css初始化.css全局设置.常用meat标签.rem适配.flex布局.相关技巧(手势库使用.多行截字.1像素边线.点击状态.placeholder居中等) reset 引用 norma ...

  8. webrtc初识

    最近由于项目的需求,开始接触了webrtc这个东西.没想到这东西的门槛还是蛮高的,接下来分享一下我所踩过的坑,希望对以后初次接触这个东西的人有所帮助. webrtc官网 第一步当然是看官方主页了(ww ...

  9. 内置函数dict

    本函数是从可迭代对象来创建新字典.比如一个元组组成的列表,或者一个字典对象. 例子: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #dict() #以键对方式构造字典 ...

  10. Python先合并再排序

    前几天遇到的美团笔试题 题目:大概要求输入两组数字,对这两组数值排序然后输出结果 思路:输入两组数,合并两组数,排序 list1 = raw_input("input some number ...