“this”是否始终指向模板中的当前范围
Does 'this' always point on the current scope in a template?
模板中使用this
来获取当前范围的引用是否总是安全的?
<span ng-click="log(this)">
Is my onclick parameter always the current controllers scope?
</span>
这里有一个小提琴来说明我的意思。
也搜索了一下,但在文档中找不到任何要点。它似乎有效,但是我不想依赖未记录的功能。如果可以,请为此链接适当的文档。
log(this)
是根据作用域计算的,scope
对象中也有一个指向其自身引用的this
属性。因此,它将根据范围评估this
将产生范围本身。例如,您也可以传递$parent
,您将看到它将指向父范围,因为表达式中的参数根据当前范围进行评估将产生scope['$parent']
类似地它也发生在范围['this']上。在角度上下文中使用ng-click="method(this)"
与在 DOM 元素上执行onclick="somefunc(this)"
完全不同。Angular 之所以能够扩展它,只是因为它有一个名称this
附加到范围对象的属性。
另一件事是你不需要传递this
否则该方法是通过针对 scope 对象进行评估来运行的,因此引用这将产生范围本身。 即您也可以执行ng-click="log()"
,在 log 方法中,您可以将this
称为元素绑定到的当前范围。例如,如果您使用的是controllerAs
语法并且您正在调用:
<div ng-controller="MyOtherCtrl as vm">
<span ng-click="vm.log(this)">Click on me, if background gets teal, then this points on the child controllers scope</span>
</div>
现在this
将不是控制器实例(这是您通常期望的),相反,它只是scope
对象本身,因为它将表达式计算为scope.vm.log(scope.this)
在控制器的上下文中使用$scope
总是更安全,除非您特别想要引用由于某些指令(通过某些 ng-repeat、ng-if 等)包装该特定上下文而在视图上创建的某些子作用域。还要记住,属性在子作用域中以原型方式继承(独立作用域指令除外)。
据我所知,没有任何链接记录或任何东西,但源代码本身是官方记录。Angular 使用$parse
来扩展表达式,如果您看到源代码,您可以看到 angular 调用表达式function.apply
上下文。
this
是指控制器指令的$scope。
例如:
<div ng-controller="myCntrl">
<span ng-click="log(this)">
Is my onclick parameter always the current controllers scope?
</span>
</div>
所以,this
指的是myCntrl
的$scope。
- jQuery“this”范围问题
- 绑定promise回调函数的“this”范围
- 将“this”范围传递给回调函数
- “this”是否始终指向模板中的当前范围
- 全局范围 - 在触发事件侦听器后访问“this”
- JS - 如何使用“this”来引用不同范围内的同一对象
- 嵌套函数中“this”关键字的范围
- 使对象属性在“this”范围内可用
- 主干.js - 模型方法中“this”的范围
- 生产服务器上“this”的范围正在更改
- 我如何将包含$(this)的函数应用于选择器的范围
- ES 6类:Access "this"在另一个范围内
- 如何调用'this'在我的对象范围之外
- 使用美元的范围.$watch在控制器中使用' this '作用域时
- Javascript,承诺,如何在then范围内访问变量this
- 我怎么能得到自己的范围在定义模块在require.js?作用域是'this'我希望它是模块本身
- 在绑定bind()的函数中使用绑定this和this的函数范围
- 为什么'this'没有采取正确的范围
- 使用bind将函数的参数保存在'this&;范围
- Javascript“this"通过不同的范围