我是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的代码和结果。
答案 0 :(得分:1)
似乎你被this regression所咬,这是在1.2.0(及时交付)中引入的。其正确的修复版本是1.3.0-beta.1。
请参阅changelog entry。
这种变化假定(几乎)没有人会在没有定义模板的情况下编写指令,因此要解决它,只需在指令中添加模板定义。