在指令中声明范围的方式之间的区别(内部显示的方式)

时间:2014-06-26 03:23:28

标签: javascript html5 angularjs angularjs-directive angularjs-scope

我是AngularJS,JavaScript和HTML的新手。

我的问题是:¿在指令中声明范围的四种方法之间有什么区别?

我将展示方式,然后写出我对它的看法。如果我错了或是对的,请以有序的方式告诉我。

这是该指令的基础:

var app = angular.module('myApp', []);
app.directive('myDirective', function() {
  return {
    scope: //Here go the 4 ways
  }
});

第一种方式:

scope: true

我的理解是:

A - 创建一个新的子范围,并且此子范围继承自其周围的父范围。

B - 该指令可以访问父作用域模型。

C - 是否可以在此范围内插入值。或者,此范围仅用于访问继承的数据吗?

第二种方式

scope: { // NO content, empty object }

A - 这会创建一个独立的范围。

B - 此范围无法访问任何父模型。

C - 虽然此范围无法访问父范围,但此隔离范围可以具有子范围。

第三方

//nothing, not declaring scope attribute.

第四方

scope: {// SOME content such as data binding strategies}

感谢。请让这个地方分享与这个一般性问题相关的信息(因此它实际上回答了问题),但这也是基于个人经验的进一步发展。

1 个答案:

答案 0 :(得分:1)

所以基本上你只是总结了不同类型的创建范围。 但是你忘记了性能以及为什么创建没有隔离范围有时会更好。

隔离范围将:

  • 减少不同范围内的变量数量。
  • 继承父范围也会导致克隆观察者。
  • 防止您在一个元素上使用多个指令。

对于孤立的范围,您不能

<div myDirective myDirective2></div>

这将导致角度异常


如果您不隔离范围:

  • 可能有大量的继承变量(scope: false可以避免)
  • 可以在相同元素使用多指令

例如ngModelngClickngBlur ...不会隔离范围,因为您可以在同一元素上使用它们。像这样:

<input ng-model="someValue" ng-blur="storeInput()"></input>

如果他们隔离了他们的范围,这是不可能的。