控制器中此范围与范围之间的差异

时间:2014-04-02 09:13:55

标签: angularjs angularjs-scope

我是angularjs的新手。 如果将函数分配给$ scope或控制器中的此关键字,有什么区别? 谢谢。

示例(范围):

.controller('TestCtrl', ['$scope', function ($scope) {
    $scope.testFunc = function () {
    };
}]);

示例(this)

.controller('TestCtrl', [function () {
    var app = this;
    app.testFunc = function () {
    };
}]);

3 个答案:

答案 0 :(得分:10)

$scope是角度框架和双重数据绑定功能的核心概念。例如,它旨在与以下内容分享其内容:

  • 模板
  • 指令

例如,在模板中,您需要将函数绑定到scope才能访问它。您将无法直接调用this上绑定的功能。


编辑:感谢BKM post指出这种行为可以通过“控制器为”语法将模板直接绑定到控制器。但是由您来决定是否要在模板中访问控制器的所有对象/变量,而不是使用专用的viewModelscope)。有关利弊,请参阅:https://groups.google.com/forum/#!topic/angular/84selECbp1I


这是一个重要的角度概念,你需要理解。

见:

this键盘工作仅指j object引用您的controller,仅此而已。

答案 1 :(得分:8)

比西说错了。没有必要将函数绑定到范围以便访问它。

在最新版本的Angular JS中,1.2他们引入了一个新关键字controllerAs,以便不在控制器内部设置范围。

<div ng-controller="testCtrl as test">
    {{test.value}}
</div>

在您的控制器中

app.controller('testCtrl ', function () {
   this.value = 'Hello World';
});

请参阅生成上述控制器,但不在其中注入$scope

Here是一个很好的视频教程,解释了这个

答案 2 :(得分:0)

下面是两者之间的区别。

  1. CONTROLLER AS语法是新语法,已在1.2.0中正式发布。 $scope是一种古老的技术,自从发布了angular的初始版本以来就可以使用。

  2. 您可以使用其中一种技术。两者都有自己的用途。例如,CONTROLLER AS语法使您的代码在使用嵌套范围时更具可读性。我们在之前的视频中对此进行了讨论。

  3. 如果要使用$scope,则必须将其注入到控制器函数中,而对于CONTROLLER AS语法,则不需要进行这种注入,除非您需要其他注入。 / p>

使用哪种取决于您的个人喜好。一些人喜欢使用$scope,而另一些人喜欢使用CONTROLLER AS语法。要记住的重要一件事是,尽管您使用的是CONTROLLER AS语法,但在幕后角度仍然使用$scope。 Angular获取控制器实例,并将其添加为作用域上的引用。

<div ng-controller="cityController as cityCtrl">
    {{cityCtrl.name}}
</div>

在上面的示例中,因为我们使用的是CONTROLLER AS语法,所以angular接受cityCtrl的实例cityController并将其添加为作用域上的引用。因此,在绑定表达式中,您可以将其读取为$scope.cityCtrl.name

相关问题