AngularJS控制器中的'this'与$ scope

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控制器的工作?


智慧大石
浏览 1160回答 4
4回答

慕尼黑8549860

“addPane”分配给它的原因是因为该<pane>指令。该pane指令require: '^tabs'将来自父指令的tabs控制器对象放入链接函数中。addPane被分配,this以便pane链接功能可以看到它。然后在panelink函数中,addPane它只是tabs控制器的一个属性,它只是tabsControllerObject.addPane。因此,pane指令的链接功能可以访问tabs控制器对象,从而访问addPane方法。我希望我的解释很清楚......这很难解释。

缥缈止盈

我建议你阅读以下帖子:&nbsp;AngularJS:“Controller as”或“$ scope”?它很好地描述了使用“Controller as”在“$ scope”上公开变量的优点。我知道你具体问过方法而不是变量,但我认为最好坚持使用一种技术并与之保持一致。所以我认为,由于帖子中讨论的变量问题,最好只使用“Controller as”技术并将其应用于方法。
打开App,查看更多内容
随时随地看视频慕课网APP