我是 Angular 新手,目前正在尝试理解 Angular 指令。我在我的机器上使用 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:
有人可以在这里提供线索吗?
Angular 1.2.14 的代码和结果可以是 found here ,还有 Angular 1.2.0rc3 can be found here 的那个.
最佳答案
看来你被this regression咬了在 1.2.0 中引入(及时交付)。其应有的修复版本是1.3.0-beta.1。
请参阅changelog entry .
此更改假设(几乎)没有人会在不定义模板的情况下编写指令,因此要解决此问题,只需在指令中添加模板定义即可。
关于javascript - 隔离范围在 Angular 1.2.0rc3 和 1.2.14 中的行为有所不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22269021/