Javascript 使用指令';具有隔离作用域的s compile函数似乎访问了错误的作用域
我不确定这是angularjs错误还是我做错了什么,但当我使用隔离作用域和编译函数创建指令以编程方式修改模板时,使用了错误的作用域。有趣的是,如果我在users中将ng repeat更改为Javascript 使用指令';具有隔离作用域的s compile函数似乎访问了错误的作用域,javascript,angularjs,angularjs-directive,Javascript,Angularjs,Angularjs Directive,我不确定这是angularjs错误还是我做错了什么,但当我使用隔离作用域和编译函数创建指令以编程方式修改模板时,使用了错误的作用域。有趣的是,如果我在users中将ng repeat更改为项,它不应该工作,因为我使用的是隔离作用域…它实际上可以工作。更令人困惑的是,这段代码实际上在angular 1.1.3中工作正常。有人知道发生了什么吗 小提琴: 在第1.2.3节中不工作- 按照第1.1.3节的规定进行操作- 在1.2.3中使用“用户中的项目” 例如: <!DOCTYPE html>
项,它不应该工作,因为我使用的是隔离作用域…它实际上可以工作。更令人困惑的是,这段代码实际上在angular 1.1.3中工作正常。有人知道发生了什么吗
小提琴:
在第1.2.3节中不工作-
按照第1.1.3节的规定进行操作-
在1.2.3中使用“用户中的项目”
例如:
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8 />
<title>Demo Blog</title>
</head>
<body>
<div ng-app="app" class="container">
<h1>Blog Demo</h1>
<div class="row" ng-controller="main">
<collection items="users">
{{ $index + 1 }} - {{ item.name}} / {{ item.email }}
</collection>
</div>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.3/angular.min.js"></script>
</body>
</html>
var app = angular.module('app', [ ]);
app.controller("main", function($scope) {
$scope.users = [
{ name : "bob", email : "bob@aol.com" },
{ name : "joe", email : "joe@aol.com" }
];
});
app.directive("collection", function() {
return {
restrict : "E",
scope : {
"items" : "="
},
compile : function(el, attrs) {
var itemTemplate = el.text();
// if I change ng-repeat to "item in users" it works!
el.html('<ul><li ng-repeat="item in items">' + itemTemplate + '</li></ul>');
}
};
});
演示博客
博客演示
{{$index+1}}-{{item.name}/{{item.email}
var-app=angular.module('app',[]);
应用控制器(“主”,功能($scope){
$scope.users=[
{姓名:“鲍勃”,电子邮件:bob@aol.com" },
{姓名:“乔”,电子邮件:joe@aol.com" }
];
});
应用程序指令(“集合”,函数(){
返回{
限制:“E”,
范围:{
“项目”:“=”
},
编译:函数(el、ATTR){
var itemTemplate=el.text();
//如果我将ng repeat更改为“用户中的项目”,它会工作!
html(“- ”+itemTemplate+”
);
}
};
});
使用转置
:
app.directive("collection", function() {
return {
restrict : "E",
scope : {
"items" : "="
},
template : '<ul><li ng-repeat="item in items">
<span ng-transclude></span></li></ul>',
transclude : true
};
});
app.directive(“collection”,function()){
返回{
限制:“E”,
范围:{
“项目”:“=”
},
模板:'-
',
转移:对
};
});
酷!因此,转包该内容不会使用未定义项的父范围?我认为这就是转置的全部意义?转置的内容确实可以访问外部范围:但在本例中,它也可以访问隔离范围?因为这里只定义了项目?是的<代码>$index
和项
仅在指令范围内可用。所以转换使用了这个作用域。这看起来是改变了这个行为的提交:这是AngularJS 1.1中的一个bug。GitHub上的相关问题。