AngularJS:$ scope vs this:$ scope的用途是什么?

use*_*246 6 javascript angularjs angularjs-scope

我在AngularJS风格指南中找到了这个

首选使用控制器作为语法并使用变量捕获它:

这意味着我可以通过它将所有功能和模型分配给控制器,并通过视图中的别名进行访问.如果我这样做,我发现我真的没有用$scope了.一个例外是当我想访问其中的内容时$rootScope.

因此,考虑到引用的建议,$scope如果我不想访问任何内容,我应该何时使用$rootScope

也就是说,我应该将所有东西都移到控制器上this吗?如果没有,那么应该留在$scope什么?

lea*_*iro 6

如果我不想访问$ rootScope中的任何内容,我应该何时使用$ scope?

  • $scope不仅仅是为了访问中的属性或功能$rootScope.示例(通常不常见):假设您需要更新DOM元素而不是以角度方式更新,这意味着通过任何修改组件值的外部库(可视化)更新它,但ng-model组件的内容不会得到更新,你需要它!该怎么办?简单:( $scope.$digest取决于你做什么,可能还需要任何其他角度功能).

我应该把所有东西都搬到控制器那里吗?

  • 不,你没有!实际上这样做并不是一个好主意.为什么?当您将一切交给控制器,您所提供的访问从视图中,这是不切实际的,因为你不认为一切都需要在控制器宣称"一切".在控制器中有时(大多数情况下)你使用的变量和函数只是作为其他函数和变量(私有东西的种​​类)的补充:它应该在控制器内保持"私有".见下面的例子:

angular
  .module('myapp', [])
  .controller('foo', function() {

    var vm = this;
    // only this will be available in the view thanks to the controller as syntax
    vm.wizard = {
      userID: null,
      totalCartCount: 0
    }

    // stuff used only inside the controller
    vm.private = {
      subtotalByProducts: [],
      readyToCheckoout
    }

    // only "public" stuff is returned here
    return vm.wizard;

    // functions
  });
Run Code Online (Sandbox Code Playgroud)

如果没有,那么什么应该留在$ scope?

您放入的$scope内容完全取决于您,因为它使用的是controller as语法,但请记住,$scope视图中的所有内容都可以访问.这个想法是减少传递给视图的变量.这在小型webapp中并不明显,但是当应用程序的大小变大时,您可以注意到一些更改(更多时间加载等).

这是每个开发人员的观点问题,以及我们任何人使用最佳实践的喜好程度.