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

时间:2014-08-22 16:35:44

标签: angularjs angularjs-scope

我搜索了很多,但我无法理解为什么有时候人们会在控制器中使用$scope,有时候会使用this。 我的意思是,有什么区别:

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 个答案:

答案 0 :(得分:1)

范围是视图可用的对象。视图可以使用Angular绑定表达式,并在范围上评估这些表达式:

<div ng-controller="MyCtrl">
    {{ s_my_int }} // will display 12

    {{ t_my_int }} // won't display anything: the scope doesn't have a t_my_int property
</div>
但是,有些人更喜欢将控制器本身暴露在范围内。这可以使用controller as语法:

<div ng-controller="MyCtrl as foo">
    {{ s_my_int }} // will display 12

    {{ foo.t_my_int }} // will display 12
</div>

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