Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用指令';具有隔离作用域的s compile函数似乎访问了错误的作用域_Javascript_Angularjs_Angularjs Directive - Fatal编程技术网

Javascript 使用指令';具有隔离作用域的s compile函数似乎访问了错误的作用域

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>

我不确定这是angularjs错误还是我做错了什么,但当我使用隔离作用域和编译函数创建指令以编程方式修改模板时,使用了错误的作用域。有趣的是,如果我在users中将ng repeat更改为
项,它不应该工作,因为我使用的是隔离作用域…它实际上可以工作。更令人困惑的是,这段代码实际上在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上的相关问题。