隔离范围在角度1.2.0rc3和1.2.14中表现不同

时间:2014-03-08 11:59:26

标签: javascript angularjs

我是Angular的新手,我目前正在尝试理解角度指令。我在我的机器上使用角度1.2.14。我创建了两种类型的指令,一种是使用scope: {}创建的(隔离范围),另一种是使用scope: true创建的(继承范围)。

<!doctype html>
<html lang="en" ng-app="myApp">
<head>
  <meta charset="UTF-8">
  <title>Directive 10</title>
</head>
<body>

<div ng-init="myvar = 'MyVar!' "></div>
Level A : {{ myvar }}
<div my-true-dir>
  Level B : {{ myvar }}
</div>
<div my-obj-dir>
  Level C: {{ myvar }}
</div>

<script src="js/angular.js"></script>
<script>
var app = angular.module('myApp', []);
app.directive('myTrueDir', function() {
  return {
    scope: true
  };
});
app.directive('myObjDir', function() {
  return {
    scope: {}
  };
});
</script>
</body>
</html>

根据ng-book中的描述,隔离范围将无法访问外部范围,反之亦然。这意味着在级别3中,它不应该访问myvar,这是在外部范围内声明的。但是当我运行给定的代码时,我得到了这个。

Level A : MyVar!
Level B : MyVar!
Level C: MyVar!

我认为这可能是ng-book的错误,但当我在angular.js 1.2.0rc3中运行此代码时,结果就像ng-book中描述的那样:

Level A : MyVar!
Level B : MyVar!
Level C: 

有人能在这里提供线索吗? 角度1.2.14的代码和结果可以是found here,也可以是角度为1.2.0rc3 can be found here的代码和结果。

1 个答案:

答案 0 :(得分:1)

似乎你被this regression所咬,这是在1.2.0(及时交付)中引入的。其正确的修复版本是1.3.0-beta.1。

请参阅changelog entry

这种变化假定(几乎)没有人会在没有定义模板的情况下编写指令,因此要解决它,只需在指令中添加模板定义。