AngularJS控制器中的'this'与$ scope在AngularJS主页的“创建组件”部分中,有以下示例:controller: function($scope, $element) {
var panes = $scope.panes = [];
$scope.select = function(pane) {
angular.forEach(panes, function(pane) {
pane.selected = false;
});
pane.selected = true;
}
this.addPane = function(pane) {
if (panes.length == 0) $scope.select(pane);
panes.push(pane);
}}注意如何select添加方法$scope,但是addPane添加了方法this。如果我将其更改为$scope.addPane,则代码会中断。文档说实际上存在差异,但没有提到差异是什么:以前版本的Angular(pre 1.0 RC)允许您this与该$scope方法互换使用,但现在不再是这种情况了。内的方法上的范围限定this并且$scope是可互换的(角套this到$scope),但是不另外你的控制器构造内部。如何this和$scope在AngularJS控制器的工作?
4 回答
慕尼黑8549860
TA贡献1818条经验 获得超11个赞
“addPane”分配给它的原因是因为该<pane>
指令。
该pane
指令require: '^tabs'
将来自父指令的tabs控制器对象放入链接函数中。
addPane
被分配,this
以便pane
链接功能可以看到它。然后在pane
link函数中,addPane
它只是tabs
控制器的一个属性,它只是tabsControllerObject.addPane。因此,pane指令的链接功能可以访问tabs控制器对象,从而访问addPane方法。
我希望我的解释很清楚......这很难解释。
缥缈止盈
TA贡献2041条经验 获得超4个赞
我建议你阅读以下帖子: AngularJS:“Controller as”或“$ scope”?
它很好地描述了使用“Controller as”在“$ scope”上公开变量的优点。
我知道你具体问过方法而不是变量,但我认为最好坚持使用一种技术并与之保持一致。
所以我认为,由于帖子中讨论的变量问题,最好只使用“Controller as”技术并将其应用于方法。
添加回答
举报
0/150
提交
取消