何时在 AngularJS Web 应用程序中使用 $scope

When to use $scope in AngularJS Web application?

本文关键字:scope 应用程序 AngularJS Web 何时      更新时间:2023-09-26

我最近开始使用AngularJS,并掌握了它的基础知识,但是在我看到的示例中,我发现了两种不同的方法。

将变量和函数设为私有:

function myController(){
  var controller = this;
  controller.myVar = 0;
  controller.myFunction = function(){...};
}

并通过$scope公开它们:

function myController(){
  $scope.myVar = myVar;
  $scope.myFunction = function(){...}
}

我可以理解将某些东西设为私有的必要性,但是将变量和函数公开为公共对我来说并不重要,因为在这些情况下感觉单一责任原则被打破了。

有充分的理由公开这样的事情吗?除了公开某些内容之外,还有其他选择吗?还是我担心得太多了?

$scope是Angular中较老的做事方式。新的方法是使用 controllerAs 语法 - 即将 this 的值绑定到变量时。

它们都有效,但引入更新的controllerAs做事方式有很多原因 - 其中最主要的是因为它更接近他们所期望的Angular 2存在方式。此外,控制器作为做事的方式,允许人们在视图中嵌套代码范围,并更好地了解插值的来源。例如:

<div ng-controller="controller1">
   {{someVal}}
   <div ng-controller="controller2">{{anotherVal}}</div>
</div>

由于范围是在 Angular 中继承的,因此很难判断 anotherVal 的值是来自 controller1 还是来自controller2。使用 controllerAs 语法时,它通过能够执行以下操作来清除一点:

<div ng-controller="controller1 as ctrl1">
    {{ctrl1.someVal}}
   <div ng-controller="controller2 as ctrl2">
       {{ctrl2.anotherVal}}
   </div>
</div>

现在,这些值的来源变得很明显了。

但是,要直接回答您的问题,当您希望访问某些角度生命周期钩子(例如$scope.$watch$scope.apply等)时,您可能仍然需要使用 $scope 对象。

我相信公开这样的事情的主要原因是为了测试,并让 Angular "知道"某些数据更改,以便它可以让任何"侦听"视图对此类更改做出反应和更新。

仅在执行数据绑定或要在控制器之间传递数据时使用$scope,否则不必这样做。