角度范围 - 隔离VS继承。哪一个更具限制性

时间:2015-03-04 22:59:49

标签: angularjs angularjs-directive angularjs-scope

我已经看过几个你管视频和读取其他堆栈溢出线程但仍无法弄清楚哪个角度范围更具限制性。孤立或继承。从隔离的名称来看,感觉它是否是最严格的范围,但因为它允许各种设置,如@,=和&对我而言,它似乎比继承范围更少限制。

所以问题是哪一个更具限制性,为什么?

2 个答案:

答案 0 :(得分:0)

我猜想你对“限制性”的定义与对外部范围内数据的访问有关。

根据该定义,隔离更具限制性。隔离范围不会从其父级继承,因此它无法访问在其父级上定义的变量。 (您仍然可以通过scope.$parent.p)访问它们。

继承范围scope: true,创建一个从父级继承的子范围,因此它可以访问父范围上公开的所有变量。

所以,如果你有以下

<div ng-init="p1 = 'foo'; p2 = 'bar'">
  <isolate p="p1"></isolate>
  <inherited></inherited>
</div>

和指令定义为:

.directive("isolate", function(){
  return {
     scope: {
        p: "="
     },
     link: function(scope){
        var p1a = scope.p;  // "foo"
        var p1b = scope.p1; // undefined
        var p2  = scope.p2; // undefined
     }
  }
})
.directive("inherited", function(){
  return {
     scope: true,
     link: function(scope){
        var p1 = scope.p1; // "foo"
        var p2 = scope.p2; // "bar"
     }
  }
}

isolate指令只会看到scope.p" - which is a proxy for p1 , and继承了`将“看到”

答案 1 :(得分:0)

隔离更具限制性,因为您需要手动声明所有可能的绑定以及它们使用@=等的方式。

使用继承范围,您不需要声明任何内容:所有内容都可以从父范围获得。