如何调用Angular中的Controller函数?

时间:2013-11-16 11:30:24

标签: javascript angularjs

这个简单的角度控制器:

var WorldCtrl = function ($scope) {
  $scope.population = 7000;
  $scope.countries = [{name: 'India', population: 121}, {name: 'China', population: 178} ];
};

这个控制器在视图中以这种方式使用

<body ng-app>
<ul ng-controller="WorldCtrl">
  <li ng-repeat="country in countries">
    {{country.name}} has population of {{country.population}}
  </li>
  <hr>
  World's population: {{population}} millions
</ul>
</body>

问题

  1. WorldCtrl是一个有计划的javascript函数对象还是它还有更多?
  2. 代码中没有任何内容可以调用WorldCtrl()函数。这是怎么发生的?
  3. $scope似乎是传递给WorldCtrl()的参数/参数,但它不会那样。因为它是一个普通的参数,我们可以称之为WorldCtrl(foo),它仍然可以正常工作。但是$scope似乎对命名&amp;仅在定义WorldCtrl($ scope)时有效。有谁解释了这个原因?
  4. $scope似乎是一个角度创造的对象。由WorldCtrl函数传递引用,不返回任何有用的东西。因此对$ scope的任何更改都会更改原始对象,然后角度会传递到视图中。正确的吗?

1 个答案:

答案 0 :(得分:2)

正如评论者所建议的那样,您应该仔细阅读文档并完成Angular tutorial

要开始学习,我还强烈推荐egghead.io

Angular可以作为您应用程序的主干。因此,它增加了一些应该遵守的惯例。

例如,

WorldCtrl可用作controller

Angular使用dependency injection,负责让$scope工作。 $ scope不是“常规”参数。注入它意味着您告诉控制器函数您希望在其中使用$ scope对象。


以新的方式考虑您的应用程序。 您想要显示世界人口数据。因此,您需要一个能够完成这项工作的视图。视图是您的HTML标记。每个视图都应绑定到自己的控制器。控制器包含视图逻辑并向其提供数据。例如,您可以执行以下操作:

  • 定义一个应显示世界人口数据的视图
  • 为您的视图定义一个控制器,该控制器通过$scope对象提供数据。
  • 从您想要的任何地方获取数据并将其存储在service
  • 将服务注入控制器并将其信息复制到控制器。