关于angularjs:在控制器中使用$ scope和this有什么区别?

What is the difference between using $scope and this in controllers?

本问题已经有最佳答案,请猛点这里访问。

我到处搜索,但我不明白为什么有时人们在控制器中使用$scope,有时使用this。我的意思是,有什么区别:

1
2
3
4
5
6
7
8
9
10
11
12
angular.module('app').controller('MyCtrl', function($scope) {

    // this
    $scope.s_my_int = 12;
    $scope.s_myFunction = function() { alert("I'm a function!") };
    $scope.$on('user.login', function () { alert("Welcome!"); }

    // and
    this.t_my_int = 12;
    this.t_myFunction = function() { alert("I'm a function!") };
    $scope.$on('user.login', function () { alert("Welcome!"); }
}


作用域是可供视图使用的对象。视图可以使用角度绑定表达式,这些表达式在作用域上进行计算:

1
2
3
    {{ s_my_int }} // will display 12

    {{ t_my_int }} // won't display anything: the scope doesn't have a t_my_int property

然而,有些人更喜欢将控制器本身暴露在作用域中。这可以使用controller as语法:

1
2
3
    {{ s_my_int }} // will display 12

    {{ foo.t_my_int }} // will display 12

这是个人喜好的问题。我个人更喜欢使用这个范围,因为它避免了与处理this相关的许多JS问题。控制器作为语法的优点是,当控制器嵌套时,它允许告诉您从哪个控制器获得值和调用函数,而不是依赖范围继承。