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

时间:2016-04-25 13:58:39

标签: javascript angularjs web-applications

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

将变量和函数设为私有:

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

通过$ scope将它们公开:

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

我可以理解私有化的必要性,但是将公开的变量和函数公开并不是因为我觉得单一责任原则在这些情况下被打破了。

是否有充分的理由让这样的公开?是否有公开的选择?或者我担心太多了?

2 个答案:

答案 0 :(得分:1)

$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,{{}时,您可能仍需要使用$scope.$watch对象1}}等等。

我认为将事情公之于众的主要原因就是为了测试目的,让Angular&#34;知道&#34;关于某些数据的变化,所以它可以有任何&#34;倾听&#34;视图会对此类更改做出反应和更新。

答案 1 :(得分:0)

只有在进行数据绑定或想要在控制器之间传递数据时才使用$scope,否则你不必这样做。