【问题标题】:Why directive has scope?为什么指令有范围?
【发布时间】:2016-03-06 10:56:13
【问题描述】:

据我所知,scope 基本上是控制器的一个实例。

每次我声明一个控制器时,scope 将可用于该控制器。

但是为什么指令在链接函数中有scope?

我没有为指令声明任何控制器。

那为什么 link 函数有 scope ?有什么想法吗?

【问题讨论】:

  • 一个指令有一个控制器......即链接和编译阶段修改这个范围,然后它被传递给控制器​​。
  • @CallumLinington 你能简单解释一下吗?

标签: angularjs angularjs-directive angularjs-scope


【解决方案1】:

来自doc:

范围: 指令用于注册watches的范围。

您可能也有兴趣了解$scope and scope 之间的区别。


所有指令都有一个与之关联的范围。他们使用这个范围来访问模板和链接函数中的数据/方法。默认情况下,除非明确设置,否则指令不会创建自己的范围。因此,指令使用它们的父范围(通常是控制器)作为自己的。

然而,AngularJS 允许我们通过传递一个称为指令定义对象的配置对象来更改指令的默认范围。指令定义对象——我们称之为 DDO——是一个简单的 JavaScript 对象,用于配置指令的行为、模板等。查看 AngularJS docs 关于 DDO。

因此,我们可以在链接函数中使用作用域来处理父作用域、子作用域或独立作用域。

您可以访问this 了解有关指令范围内的详细信息。


你可以share the data between controller and linking function。

有时我们希望在 Angular 指令的控制器和链接函数中访问相同的数据。通常我们将此数据添加到范围对象中。这有一些问题,例如将其暴露给任何子范围。将共享属性添加到控制器实例本身并在链接函数中访问。


您可能也对what is need of link function?感兴趣

【讨论】:

    【解决方案2】:

    指令是 Angular 定义“组件”的方式:您可以指定其标记的外观以及在渲染之前、期间和之后的行为方式。链接函数允许您在它被“链接”之前或之后将事件连接到 DOM 元素(另请参见:链接前和链接后方法)。当这些事件被触发时,您可能希望更改范围内的一些变量,这就是您可以在链接函数中访问它的原因。

    【讨论】:

      猜你喜欢
      • 2011-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-12
      • 1970-01-01
      • 1970-01-01
      • 2015-10-09
      • 2023-04-04
      相关资源
      最近更新 更多