Javascript AngularJS$scope和Controller在语法上真的没有区别吗?

Javascript AngularJS$scope和Controller在语法上真的没有区别吗?,javascript,angularjs,angularjs-scope,angularjs-ng-repeat,angularjs-controlleras,Javascript,Angularjs,Angularjs Scope,Angularjs Ng Repeat,Angularjs Controlleras,我正在学习angularJS,在学习的过程中,我发现控制器的语法更容易阅读,对于来自OO世界的我来说也更容易理解。我读过几篇文章,所以答案似乎都指向$scope,“controller as”语法是相同的,“controller as”语法只是语法上的糖分 然而,我在SO上发布了另一个问题,回答这个问题的用户说,即使我使用控制器作为语法,我仍然必须注入$scope来使用“ui select”指令。是哪一个?如果我不必使用$scope,那么让“controller as”语法与ui-select一

我正在学习angularJS,在学习的过程中,我发现控制器的语法更容易阅读,对于来自OO世界的我来说也更容易理解。我读过几篇文章,所以答案似乎都指向$scope,“controller as”语法是相同的,“controller as”语法只是语法上的糖分


然而,我在SO上发布了另一个问题,回答这个问题的用户说,即使我使用控制器作为语法,我仍然必须注入$scope来使用“ui select”指令。是哪一个?如果我不必使用$scope,那么让“controller as”语法与ui-select一起工作,我还缺少什么呢?

很抱歉,这太长了,没有示例


控制器的两种形式:控制器和控制器作为函数。与我的理解主要不同的是,当调用控制器时,使用new关键字调用控制器,这就是“this”语法工作的原因。这也是为什么您可以使用Controller作为语法执行原型继承,而不能使用普通的Controller语法执行原型继承。关于Controller As的另一个很酷的部分是可以放置范围变量的名称空间,这意味着在HTML中可以很容易地推断哪些部分会转到哪个控制器。如果你愿意,我可以举一些例子,但这是我理解的核心区别。

对不起,这篇文章太长了,没有例子

控制器的两种形式:控制器和控制器作为函数。与我的理解主要不同的是,当调用控制器时,使用new关键字调用控制器,这就是“this”语法工作的原因。这也是为什么您可以使用Controller作为语法执行原型继承,而不能使用普通的Controller语法执行原型继承。关于Controller As的另一个很酷的部分是可以放置范围变量的名称空间,这意味着在HTML中可以很容易地推断哪些部分会转到哪个控制器。如果您愿意,我可以举一些例子,但这是我理解的核心区别。

controllerAs语法将您的控制器公开给模板,因此您可以将它们作为控制器实例的属性,而不是将一组属性绑定到控制器中的$scope。控制器是JavaScript类构造函数

因此,如果您有以下情况:

angular.module('myApp')
  .controlller('MyController', function() {
    var vm = this;
    vm.foo = 'bar';
  });
…您可以在模板中访问它,如下所示:

<div ng-controller="MyController as vm">
  {{ vm.foo }}
</div>
现在,如果您想访问控制器中的作用域变量,或者调用$on之类的作用域方法,那么仍然需要将$scope注入控制器中。注意$before范围,它表示它是一个服务。此$scope服务仅公开当前范围

所有这些都说明,如果您发现自己将$scope注入到控制器中,您应该质疑您的方法。最好通过link函数创建自定义指令和访问范围,或者从模板创建访问范围

推荐阅读:

controllerAs语法将您的控制器公开给模板,因此您不必将一组属性绑定到控制器中的$scope,而可以将它们作为控制器实例的属性。控制器是JavaScript类构造函数

因此,如果您有以下情况:

angular.module('myApp')
  .controlller('MyController', function() {
    var vm = this;
    vm.foo = 'bar';
  });
…您可以在模板中访问它,如下所示:

<div ng-controller="MyController as vm">
  {{ vm.foo }}
</div>
现在,如果您想访问控制器中的作用域变量,或者调用$on之类的作用域方法,那么仍然需要将$scope注入控制器中。注意$before范围,它表示它是一个服务。此$scope服务仅公开当前范围

所有这些都说明,如果您发现自己将$scope注入到控制器中,您应该质疑您的方法。最好通过link函数创建自定义指令和访问范围,或者从模板创建访问范围


推荐阅读:

控制器as很好,因为您可以嵌套ng控制器并知道您正在操作哪个控制器

<div ng-controller="Ctrl1 as c1">
  <--Using c1 here -->
  <div ng-controller="Ctrl2 as c2">
  <-- Using c2 here -->
  </div>
  <--Using c1 here -->
</div>

控制器as很好,因为您可以嵌套ng控制器并知道您正在操作哪个控制器

<div ng-controller="Ctrl1 as c1">
  <--Using c1 here -->
  <div ng-controller="Ctrl2 as c2">
  <-- Using c2 here -->
  </div>
  <--Using c1 here -->
</div>

我在这里就这个话题写了一个相当详细的答案:。我不会再尝试回答,但我希望答案能给你一些好的背景。我在这里就这个主题写了一个相当详细的答案:。我不会再回答了,但我希望答案能给你一些好的背景。