在编写指令的时候,会有一个独立作用域的问题(scope),他默认的是

scope:false
  不创建自己的作用域,直接使用的就是父级的作用域,
  问题:容易出现全局的污染,是的指令的重复性使用回出现一些问题。
scope:true
  创建指令自己的独立作用域,继承父级的作用域,可以解决上面的问题
scope:{
  //&,=,@
  name:'='
}

这种写法就使得指令与外界的作用域相互分割,只能通过&,=,@,进行数据的相互传递,

下面细数一些在ng中自己会创建独立作用域的指令(但是ta们都是继承父级的作用域的,因此你可以使用$parent,关键时刻)

ng-include、ng-switch、ng-repeat、ng-controller、ng-view

关于ng-repeat的独立作用域问题尤其常见

demo:

$scope.myArr = [11,12];
$scope.$watch('myArr',function(newVal,oldVal){
  console.log(newVal);
});
<ul>
<li ng-repeat= "num in myArr">
  <input type="text" ng-model="num"/>
  <span ng-bind="num"></span>
</li>
</ul>

发现我们在改变值的时候,并不会触发$watch

$scope.myObj = [{name:11},{name:12}];
$scope.$watch('myObj',function(newVal,oldVal){
  console.log(newVal);
});
<ul>
<li ng-repeat= "nam in myObj">
  <input type="text" ng-model="nam"/>
  <span ng-bind="nam"></span>
</li>
</ul>

发现这里也不会触发$watch

进一步查证发现,$watch如果在监听一个对象的时候,他默认只会检测对象的引用是否改变,我们需要加上第三个参数,他就会监听对象的值的变年

$scope.$watch('myObj',function(newVal,oldVal){
  console.log(newVal);
},true);

http://www.cnblogs.com/evaling/tag/angularJS/

angular的指令独立作用域(以及$watch的使用)的更多相关文章

  1. angular js 指令的数据传递 及作用域数据绑定

    <div my-directive my-url="http://google.com" my-link-text="Click me to go to Googl ...

  2. 【AngularJS】—— 12 独立作用域

    前面通过视频学习了解了指令的概念,这里学习一下指令中的作用域的相关内容. 通过独立作用域的不同绑定,可以实现更具适应性的自定义标签.借由不同的绑定规则绑定属性,从而定义出符合更多应用场景的标签. 本篇 ...

  3. Angular之指令Directive系列

    项目筹备近期开启Angular学习,指令比较难理解所以记录备案,推荐Angualr实战学习视频大漠穷秋 Angular实战 一.指令directive概述 指令可以对元素绑定事件监听或者改变DOM结构 ...

  4. Angular自定义指令(directive)

    angular自定义指令,意我们可以通过angula自己定义指令,来实现我们的特殊要求,为所欲为,一支穿云箭,千军万马来相见 多少年的老规矩了,先看代码: <!DOCTYPE html> ...

  5. angular分页指令

    目前的多个项目中都用到分页这个功能,为了提高可复用性,我特地分离出来写了个分页的指令.直接贴代码,详情如下: index.html <body id="sBill" ng-c ...

  6. angular 自定义指令详解 Directive

    在angular中,Directive,自定义指令的学习,可以更好的理解angular指令的原理,当angular的指令不能满足你的需求的时候,嘿嘿,你就可以来看看这篇文章,自定义自己的指令,可以满足 ...

  7. angular.js 中的作用域 数据模型 控制器

    1.angular.js 作为后起之秀的前端mvc框架,他于传统的前端框架都不同,我们再也不需要在html中嵌入脚本来操作对象了.它抽象出了数据模型,控制器及视图. 成功解耦了应用逻辑,数据模型,视图 ...

  8. angular directive指令相互独立

    想要让指令的使用相互间不干扰,如下:

  9. angular自定义指令-directive

    Directive究竟是个怎么样的一个东西呢?我个人的理解是这样的:将一段html.js封装在一起,形成一个可复用的独立个体,具体特定的功能.下面我们来详细解读一下Directive的一般性用法. v ...

随机推荐

  1. HLSL实现简单的图像处理功能

    由于对于dxva2解码得到的数据不宜copy回内存给CPU处理,所以最好的办法是在GPU上直接进行处理.D3D的像素着色器能够对像素直接进行操作,实现点运算极其简单方便,简单的卷积运算效果也非常好.但 ...

  2. LA-4255 Guess (拓扑排序+构造)

    题目大意:一个未知的整数序列,给出其任意一个区间和的正负,还原这个序列.任意一个满足条件的序列即可. 题目分析:将连续区间和转化为前缀和之差,sumx-1与sumy的大小关系已知,以此建立一条有向边, ...

  3. Hibernate所用15个jar包

    Hbernate3.jar-------------------核心包antlr.jar----------------------------语言转换工具,hibernate用他将hql语句转换为s ...

  4. MySQLdb和PIL安装

    最近将个人博客部署到树莓派上海真是颇费周折,尤其是在MySQLdb和PIL的安装上 MySQLdb 先说Windows吧(比较简单) 直接pip安装即可或者下载编译版更方便:http://source ...

  5. python:小乌龟turtle

    turtle的意思是乌龟,也是python中自带的图形函数,使用turtle的方法也很形象,就好像在画布上有一个小乌龟(在画布上是一个箭头),然后你可以让它动来动去,它经过的地方就被留下了记号. 例如 ...

  6. CF910B

    题解: dp f[i][j]表示i根a,j根b要多少 然后随便转移一下 代码: #include<bits/stdc++.h> using namespace std; ][],n,a,b ...

  7. TPCC-MySQL(转自imysql.com)

    [Tpcc-mysql] Tpcc-mysql是percona基于tpcc衍生出来的产品,专用于mysql基准测试,其源码放在bazaar(Bazaar是一个分布式的版本控制系统,采用 GPL 许可协 ...

  8. 记一次GreenPlum性能调优

    在部署了的GreenPlum集群中进行数据查询时,发现数据量一旦大了,查询一跑就中断,提示某个segment中断了连接. ERROR 58M01 "Error on receive from ...

  9. 2PC

    两阶段提交()Two-Phase Commit):是计算机网络尤其是在数据库领域内,为了使基于分布式系统架构下的所有节点在进行事务处理过程中能够保持原子性和一致性而设计的一种算法.通常,二阶段提交协议 ...

  10. QUnit使用

    什么是单元测试 每个单元测试就是一段用于测试一个模块或接口是否能达到预期结果的代码. QUnitjs 概念Qunit是一款强大的用于帮助调试代码的,JavaScript单元测试框架.是jQuery的官 ...