角度控制器注册

时间:2014-10-19 04:17:23

标签: angularjs controller

一个非常基本但直观的问题。写作' ng-controller'在' ng-app'在JS中将控制器注册到应用程序是互斥的。

我的意思是如果我不在JS中写入resgisteration,但仍然在HTML中它的范围在ng-app下。所以它会造成任何问题。对此有任何好的解释,而不是明显的解释。 感谢。

代码示例 - http://plnkr.co/edit/zO0dBR5UK2OTpERSZQei?p=preview

 filterDemo.controller('displayController', ['$scope', function($scope) { }]);

如果我没有在脚本中注册控制器,那么当控制器在应用程序内部的HTML中时,它是如何重要的。

2 个答案:

答案 0 :(得分:1)

简短回答

将控制器注册到应用程序(或应用程序中的任何其他模块)是一种完全不同的操作,即在HTML中编写“ng-controller”。所以他们不互相排斥。相反,它们都是控制器正常运行所必需的。

你不想要“明显的解释”,然而,你的问题是关于基本的角度概念,这些概念往往是“显而易见的”。我会尝试挖掘更多或者与它略有不同的角度。但它与Angular博士真正谈论的内容并没有太大的不同。

将Controller注册到应用

如果您没有注册控制器,Angular应用程序将完全忽略它。几乎就像你甚至没有在HTML中包含.js文件!在Angular中,(几乎)几乎没有任何东西是全局的,因此你必须注册所有东西以使其活跃。注册可以直接在主应用程序模块上,也可以在依赖于应用程序的任何其他模块上进行。 (模块也可以依赖于其他模块等)。

在HTML

中编写ng-controller

在HTML中引用控制器有点像创建控制器的“实例”。您可以在同一页面中创建零(0),1或甚至多个。最重要的是,控制器可以随时进出。

以下信息有点偏离主题,但在考虑控制器及其“含义”时可能很有用:

***还有其他方法来实例化控制器:您可以使用从指令或$ routeProvider的路由引用的控制器,而不是在HTML中编写控制器。

路由也可以引用控制器

关于$ routeProvider案例的详细信息:当你有一个视图模板从模板HTML中的根元素引用ng-controller时,它具有与从路由定义中引用的完全相同的效果,从这个意义上说有些互斥 - 虽然在两个地方都指定不会产生错误,但我相信它们将是同一个实例。 (我希望我在这里不要再混淆你了。)

控制器,范围和DOM链接

控制器始终与“范围”相关联。没有“范围”,它们就不存在。反过来,“范围”不能存在于DOM之外。 “范围”始终与DOM中的一个且仅一个元素相关联。

答案 1 :(得分:0)

我遵循在html文件中的body标签之后注册所有脚本的惯例,以确保在开始执行脚本之前加载了所有html。 你正在做的事也会奏效。我唯一的反馈是看到脚本标签分散在你的代码中可能会让人感到困惑。

另一个问题是能够对您的代码进行单元测试。如果你引入了对DOM的依赖来加载你的脚本,那么单元测试会变得更加困难。