一、首先回顾一下有哪些绑定策略?

看这个实在是有点抽象了,我们来看具体的实例分析吧!

二、简单的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=function(name){
       alert(Hello +name);
   };
    
}]);
 
myDirec.directive(drink,function(){
    return{
          restrict:'AE',
          scope:{
                flavor:'@'  //自动绑定,传递的是字符串
          },
          template:

{{flavor}}
, }; });
页面中使用标签部分示例:

1
 

分析我们在drink指令中为什么能取得在父作用域中的值呢?原因就在于我们使用了@绑定策略,可以将ctrlFlavor赋值给flavor,这样在模板中就能取到该值了。

=绑定:指定获取属性的类型为父作用域的属性

1
2
3
4
5
6
7
8
9
myDirec.directive(drink2,function(){
    return{
        restrict:'AE',
        scope:{
            flavor:'='  //自动绑定
        },
        template:'<input ng-model="flavor/" type="text">'
    };
});

页面:

1
 

执行的流程是这样的:

  ① 指令被编译的时候会扫描到template中的模型发现有一个flavor,

  ② 查找scope中是否定义:通过=与父作用域绑定,方式是传递父作用域中的属性ctrlFlavor;

  ③ flavor与父作用域中的ctrlFlavor属性绑定,找到它的值“鸡尾酒”;

  ④ 将model的值显示在模板中。

&绑定:传递的是父作用域中的函数

控制器部分:

1
2
3
4
5
6
7
8
9
10
11
12
myDirec.directive(greeting, function() {
    return {
        restrict:'AE',
        scope:{
            greet:'&'
        },
        template:'<input ng-model="userName" type="text">
'+
                 '<button ng-click="greet({name:userName})">问候一下</button>
'
    };
});

页面部分:

1
 

从结果上看,三个输入框中的内容互不影响,因为都是新的独立作用域,能够完成从视图到模型的绑定。

三、Expander示例

首先看控制器代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/*Expander示例*/
myDirec.controller('SomeController',function($scope) {
    $scope.title = '点击展开';
    $scope.text = '这里是内部的显示的内容';
});
 
myDirec.directive('expander', function() {
    return {
        restrict : 'EA',
        replace : true,
        transclude : true,
        scope : {
            title : '=expanderTitle'
        },
        template : '

' + '
{{title}}
' + '
 
' + '
', link : function(scope, element, attrs) { scope.showMe = false;
scope.toggle = function() { scope.showMe = !scope.showMe; }; } }; });
再看页面部分:

1
 

{{text}}

执行的流程是这样的:

  ① 指令被编译的时候会扫描到template中的模型发现有一个{{title}},

  ② 查找scope中是否定义:通过=与父作用域绑定,方式是传递父作用域中的属性;

我总是在这里犯糊涂,解释下这个“方式是传递父作用域中的属性”,这个在哪里用的呢?

1
 

{{text}}
看到没,指令中的属性expander-title='title',这不就是传递父作用域中的属性吗?

  ③ expander-title与父作用域中的title属性绑定,找到它的值“点击展开”;

  ④ 将title的值显示在模板中。

注意:指令中的独立作用域中的属性title是为了给下面的模板使用 的,而title所对应的值,要依据页面中指令的使用传人具体的父作用域中的属性,完成属性的绑定操作。

总之、我们可以利用angularjs为我们提供的数据绑定策略来实现从父作用域向指令中传值,这个很有用哦!

来自:http://www.2cto.com/kf/201504/391807.html    解析angularjs中的三种数据绑定策略

解析angularjs中的绑定策略的更多相关文章

  1. angularjs中的绑定策略“@”,“=”,“&”实例

    <!DOCTYPE html> <html lang="zh-CN" ng-app="app"> <head> <me ...

  2. AngularJs 中ngModel绑定HTML5 date数据同步问题

    以下代码例子中,直接将date类型的input标签与ng-model对应的变量绑定,会出现内存数据和页面数据不一致的问题.虽然AngularJS是双向数据绑定,但是如果用下面的方法,在页面更新date ...

  3. AngularJS中的指令全面解析(转载)

    说到AngularJS,我们首先想到的大概也就是双向数据绑定和指令系统了,这两者也是AngularJS中最为吸引人的地方.双向数据绑定呢,感觉没什么好说的,那么今天我们就来简单的讨论下AngularJ ...

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

    angularjs 指令—— 绑定策略(@.=.&) 引入主题背景:angular 的指令配置中的template可以直接使用硬编码写相应的代码,不过也可以根据变量,进行动态更新.那么需要用到 ...

  5. 深入学习AngularJS中数据的双向绑定机制

    来自:http://www.jb51.net/article/80454.htm Angular JS (Angular.JS) 是一组用来开发Web页面的框架.模板以及数据绑定和丰富UI组件.它支持 ...

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

    From:http://www.linuxidc.com/Linux/2015-05/116924.htm scope:{}使指令与外界隔离开来,使其模板(template)处于non-inherit ...

  7. Angularjs 中使用指令绑定点击事件

    项目中,模板中的菜单是jQuery控制的,在Angularjs中就运行不到了,因为菜单项是ng-repeat之后的. 如html <ul id="main-menu"> ...

  8. AngularJS中数据双向绑定(two-way data-binding)

    1.切换工作目录 git checkout step-4 #切换分支,切换到第4步 npm start #启动项目 2.代码 app/index.html Search: <input ng-m ...

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

    开门见山地说,scope:{}使指令与外界隔离开来,使其模板(template)处于non-inheriting(无继承)的状态,当然除非你在其中使用了transclude嵌入,这点之后的笔记会再详细 ...

随机推荐

  1. python学习之路---day04

    一:元组 元组案例:tuple=("张三","李四","王五","小六","大七",["1 ...

  2. Android LayerDrawable资源应用

    1.介绍 (1)常识 (2)特点 2.实例演示 <1>新建drawable文件 app--->src---->main---->res---->drawable , ...

  3. php 页面压缩---

    网站优化中,页面压缩是很有效的一种方法,可以明显提升页面访问速度. 页面压缩也有很多的方法,有PHP自带的zlib的gzip压缩,还有清除html页面中不必要的字符,空格,注释,换行符等. 第一种打开 ...

  4. Django 中的中间件

    Django 中的中间件 Django  中间件 中间件介绍 前戏 之前在判断登录的时候使用的是装饰器的功能,通过给视图函数加装饰器来增加判断是否登录的功能.但此方法的缺点是必须给每个需要判断登录的视 ...

  5. HDU 6336 (规律 + 二维矩阵的前缀和妙用)

    题目 给出长度为n 的A矩阵 , 按 int cursor = 0; for (int i = 0; ; ++i) { for (int j = 0; j <= i; ++j) { M[j][i ...

  6. springboot(五)-使用Redis

    Redis服务器 springboot要使用redis,首先当然要确保redis服务器能够正常跑起来. pom.xml 这里添加redis的依赖,当然也是springboot集成好的. <!-- ...

  7. PHPCMS中load_model,load_app_class, load_sys_func

    phpcms v9 二次开发: 在一个项目开发中遇到需要二次开发,但我们需要了解load_model,load_app_class, load_sys_func的含义: 1.调用数据库模型 //从”p ...

  8. phantomjs的和谷歌浏览器的简单使用

    一.phantomjs的简单使用 ''' 什么是phantomJs:无界面的浏览器 ''' from selenium import webdriver from time import sleep ...

  9. ElasticSearch 2.1.1学习及总结

    Install & Up cd elasticsearch-2.1.1/bin ./elasticsearch ./elasticsearch --cluster.name my_cluste ...

  10. js中函数带不带var的本质区别是什么

    本质区别是:带var的是定义,属于statement:不带var的是赋值,属于expression.不带var时,解释器认为变量已经定义过了,会在函数中找相应的定义,如果找不到,就会认为变量是在外一层 ...