angularjs 指令—— 绑定策略(@、=、&)

angularjs 指令—— 绑定策略(@、=、&)


引入主题背景:angular 的指令配置中的template可以直接使用硬编码写相应的代码,不过也可以根据变量,进行动态更新。那么需要用到那些变量,因用法的不同,所以需要设置合适的绑定策略。

一、@ 绑定策略

@ 绑定策略,它的作用就是能把指令配置的独立Scope下变量的值等于根据@绑定的指令属性的值。(指令属性的值可以使用表达式,但是得出来的值一定是字符串。)

1、上代码:

html代码

  1. <!DOCTYPE html>
  2. <htmllang="en"ng-app="myApp">
  3. <head>
  4. <metacharset="UTF-8">
  5. <title>myDirective</title>
  6. </head>
  7. <body>
  8. <inputtype="text"ng-model="myUrl">
  9. <divmy-directivemy-url="{{myUrl}}"my-link-text="click me"></div> ①
  10. </body>
  11. <scriptsrc="../../common/angular-1.0.1.min.js"></script>
  12. <scriptsrc="./demo1.js"></script>
  13. </html>

js代码

  1. angular.module(‘myApp‘,[])
  2. .directive(‘myDirective‘,function(){
  3. return{
  4. restrict:‘A‘,//属性方式
  5. replace:true,
  6. scope:{
  7. myUrl:‘@‘,//@绑定策略(默认绑定到 my-url指令属性)
  8. myLinkText:‘@‘//@绑定策略(默认绑定到 my-link-text 指令属性)
  9. },
  10. template:‘<a href="{{myUrl}}">{{ myLinkText }}</a>‘
  11. }
  12. });

2、 解释:

  • 在上面的代码中,我创建了一个指令myDirective 该指令创建了两个变量 myUrl、myLinkText,并且这俩个变量都是采用@绑定策略
  • 说一下,不管是@=还是&绑定策略,它们都有一个默认的方式,以@绑定策略为例,如上面代码那么样:myUrl:‘@‘,直接用一个@表示绑定的方式,它就会默认得将指令属性my-url的值赋值给myUrl变量。当然,你不想使用默认的方式,也就是说,你不想myUrl变量绑定my-url的值,而想要绑定其它属性名的值,那么你可以在@后加上你希望的属性名(格式要求:驼峰式)。如,我想讲myUrl绑定到<myDirective></myDirective>指令的some-attr属性的值,那么你可以这样写:myUrl:‘@someAttr‘
  • 那么我们知道了指令的myUrl变量的值是如何来的,那么我们要如何在template中使用它呢?这个很简单,看上面的代码就能很明白了,我们在template中的代码中需要用表达式的方式对其引用{{myUrl}},这样我们就能够使用到myUrl变量的值了~

3、 小结:

  • @ 绑定策略只能绑定(或者理解成传递)字符串值。要想传递方法(&)或者实现双向数据绑定(=)等操作,就得需要使用其它俩样的绑定方式咯

教程对@、=、&的讲解:
  为了让新的指令作用域可以访问当前本地作用域中的变量,需要使用下面三种别名中的一种。
  1. 本地作用域属性:使用@符号将本地作用域同DOM属性的值进行绑定。指令内部作用域可以使用外部作用域的变量:
  @ (or @attr)
  现在,可以在指令中使用绑定的字符串了。

  2. 双向绑定:通过=可以将本地作用域上的属性同父级作用域上的属性进行双向的数据绑定。就像普通的数据绑定一样,本地属性会反映出父数据模型中所发生的改变。
  = (or =attr)

  3. 父级作用域绑定 通过&符号可以对父级作用域进行绑定,以便在其中运行函数。意味着对这个值进行设置时会生成一个指向父级作用域的包装函数。
  要使调用带有一个参数的父方法,我们需要传递一个对象,这个对象的键是参数的名称,值是要传递给参数的内容。
  & (or &attr)

来自为知笔记(Wiz)

时间: 2024-08-06 07:57:31

angularjs 指令—— 绑定策略(@、=、&)的相关文章

angularjs自定义指令绑定策略---‘&’绑定

接着上一篇 理解了"="和"@"绑定之后再来理解"&"绑定,就很简单了,同理,用"桥梁"进行分析,但还是有一些例外的情况,要不然angularjs也不会单独设定一个绑定策略,看案例先: <!DOCTYPE html><html lang="en" ng-app="MyModule"><head>    <meta charset=&quo

angularjs中的绑定策略“@”,“=”,“&amp;”实例

<!DOCTYPE html> <html lang="zh-CN" ng-app="app"> <head> <meta charset="utf-8"> <title>绑定策略</title> <link rel="stylesheet" href="../bootstrap.min.css"> </head>

《AngularJS》——scope的绑定策略

scope这个对象在Angular中非常重要,可以说要想学好AngularJS,熟练使用Scope时基本功,下面介绍一下Scope的几种绑定策略. 1.@:把当前的属性作为字符串传递.你还可以绑定来自外层的scope的值,在属性值中插入{{}}即可.下面是代码. <!DOCTYPE html> <html ng-app="MyModule"> <head> <meta charset="UTF-8"> <titl

解析angularjs中的绑定策略

一.首先回顾一下有哪些绑定策略? 看这个实在是有点抽象了,我们来看具体的实例分析吧! 二.简单的Demo实例 @绑定:传递一个字符串作为属性的值.比如 str : '@string' 控制器中代码部分示例: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 myDirec.controller('MyCtrl3',['$scope',function($scope){    $scope.ctrlFlavor=鸡尾酒;        $scope.sayHello

AngularJS学习笔记之directive——scope选项与绑定策略

开门见山地说,scope:{}使指令与外界隔离开来,使其模板(template)处于non-inheriting(无继承)的状态,当然除非你在其中使用了transclude嵌入,这点之后的笔记会再详细记录的.但是这显然不符合实际开发中的需求,因为实际上,我们经常想要我们的指令能够在特定的情况下与外界进行数据上的交互,这就需要借助绑定策略之手了. 大家知道,当scope选项写为scope:{}这种形式的时候,就已经为指令生成了隔离作用域,现在,我们来看看绑定策略的三种形式:& .= .@. 首先是

AngularJS学习笔记之directive&mdash;scope选项与绑定策略

From:http://www.linuxidc.com/Linux/2015-05/116924.htm scope:{}使指令与外界隔离开来,使其模板(template)处于non-inheriting(无继承)的状态,当然除非你在其中使用了transclude嵌入,这点之后的笔记会再详细记录的.但是这显然不符合实际开发中的需求,因为实际上,我们经常想要我们的指令能够在特定的情况下与外界进行数据上的交互,这就需要借助绑定策略之手了. 大家知道,当scope选项写为scope:{}这种形式的时

angularJS 指令二

指令详解1.用directive()方法来定义指令.directive('myDirective',function($timeout,userDefinedService){ return {};});该方法接受两个参数:name(字符串):指令的名字,用来在视图中引用特定的指令factory_function(函数):该函数返回一个对象,其中定义了指令的全部行为当AngularJS启动应用时,会把第一个参数当做一个字符串,并以此字符串为名来来注册第二个参数返回的对象.也可以返回一个函数代替对

AngularJS指令参数详解

指令,很重要 AngularJS与jQuery最大的区别在哪里?我认为,表现在数据双向绑定,实质就是DOM的操作形式不一样. jquery通过选择器找到DOM元素,再赋予元素的行为: 而angularjs则是,将指令与DOM绑定在一起,再扩展指令的行为. 所以AngularJS开发最理想的结果就是,在页面HTML与CSS的设计时,设计工程师只需要关注指令的使用:而在背后的逻辑开发上,架构工程师则是不需要知道如何操作DOM,只需要关注指令背后的行为要如何实现就行:测试工程师也可以开发针对指令的单元

angularJs指令深度分析

AngularJs的指令定义大致如下 angular.module("app",[]).directive("directiveName",function(){ return{ //通过设置项来定义 }; })其中return返回的对象包含很多参数,下面一一说明 你知道用AngularJs怎么定义指令吗? 1.restrict (字符串)可选参数,指明指令在DOM里面以什么形式被声明: 取值有:E(元素),A(属性),C(类),M(注释),其中默认值为A: E(元