0

当 Angular 指令定义中未设置范围时,范围属性如何被继承?

Angular 文档中(在“指令定义对象”下)有两种情况:何时scopetrue或何时scope是对象({})。如果范围未设置或为假怎么办。在这种情况下,范围及其子级的属性如何继承?

4

2 回答 2

2

在指令定义中将作用域设置为 false(也是默认值)时,作用域的行为会根据您是否在做而有所不同transclusion

如果你不这样做transclude,它几乎使用父范围。就像您没有使用指令并直接在页面中编写链接模板一样。

小提琴

嵌入总是创建一个子作用域,但当指令作用域为假时,它以一种奇怪的方式绑定到父作用域。您可以“读取”父范围,但是一旦您“写入”到属性,它就不再绑定到父范围的相同属性,而是现在子范围上的属性,除非该属性是对象。

隐藏的小提琴

Child scope is the ones in green border.

尝试先更改父范围。在“var”输入字段中输入一些内容,您会看到子作用域的 var 也会发生变化。但是,当您在子作用域中更改 var 时,它不会更改父作用域,并且在父作用域中更改 var 不会影响子作用域,因为当您从子作用域写入 var 时,键会被破坏。这不适用于对象(在 sp.var 上尝试相同的操作,您会发现无法破坏“绑定”)。根据开发人员的说法,这是预期和/或预期的行为。

于 2013-10-13T14:58:34.573 回答
1

如果范围设置为 false(这是默认值),则该指令具有与父级相同的范围 - 不会创建新范围。由于它们共享一个范围,因此父级中的任何更改都将反映在指令中,反之亦然。

由于从封装的角度来看这不是很好,因此许多人建议尽可能使用隔离范围(隔离范围是当您将范围设置为时{}

于 2013-10-13T14:47:52.660 回答