据我所知,基本上scope
是控制器的一个实例。
每次我声明控制器scope
都可用于该控制器。
但是为什么指令在链接函数中有scope
?
我没有为指令声明任何控制器。
那么为什么link
函数有scope
?有什么想法吗?
答案 0 :(得分:6)
来自doc:
范围: 指令用于注册watches。
的范围
您可能也有兴趣看到$scope and scope之间的差异。
所有指令都有与之关联的范围。他们使用此范围来访问模板和链接功能中的数据/方法。默认情况下,除非明确设置,否则指令不会创建自己的范围。因此,指令使用它们的父作用域(通常是控制器)作为它们自己的作用。
但是,AngularJS允许我们通过传递一个称为指令定义对象的配置对象来更改指令的默认范围。指令定义对象 - 让我们将其称为DDO - 是一个简单的JavaScript对象,用于配置指令的行为,template..etc。查看AngularJS docs关于DDO。
因此,我们可以使用范围内的链接函数来处理父范围,子范围或隔离范围。
您可以访问this以获取有关指令范围内的详细信息。
你可以share the data between controller and linking function。
有时我们想在Angular指令中的控制器和链接函数中访问相同的数据。通常我们将此数据添加到范围对象中。这有一些问题,例如将其暴露给任何子范围。将共享属性添加到控制器实例本身,并在链接函数中进行访问。
感兴趣答案 1 :(得分:0)
指令是Angular定义“组件”的方式:指定其标记的外观以及它在呈现之前,期间和之后的行为方式。链接函数允许您在事件“链接”之前或之后将事件连接到DOM元素(另请参阅:链接前和链接后方法)。当这些事件被触发时,您可能想要更改范围内的一些变量,这就是您可以在链接函数中访问它的原因。