通常,在带有ng-app="myModule"指令的页面上会看到角初始化,但是只使用ng-app是有效的。但是,由于控制器之类的东西是在myModule中注册的,那么仅仅使用ng-app是否有用呢?如果您不为ng-app="..."指定一个模块,是否有方法注册控制器等
发布于 2015-06-03 14:00:09
在角1.3之前(当您可以在全局范围内定义控制器时),角能够自动发现全局定义的控制器。
从角度1.3开始,所有控制器都必须在模块中定义,因此,在没有模块的情况下,ng-app的功能非常有限。它可能对原型开发有潜在的好处,但即使在那里,你也不会得到多少。
所以,前角1.3的用法:
<div ng-app>
<div ng-controller="SomeController">
{{something}}
</div>
</div>您可以像这样定义您的javascript,它可以工作:
<script>
function SomeController($scope) {
$scope.something = "Hello";
}
</script>编辑:
正如注释中提到的,仍然可以使用$controllerProvider.allowGlobals()启用此行为。也就是说,角形小组从一开始就试图阻止我们用这种方式来定义控制器,应该避免:
注意:虽然角允许您在全局范围内创建Controller函数,但不建议这样做。在实际应用程序中,您应该使用角模块的.controller方法作为应用程序.
发布于 2015-06-03 13:57:18
阅读第一个示例https://docs.angularjs.org/api/ng/directive/ngApp
在下面的示例中,如果ngApp指令没有放在html元素上,那么文档就不会被编译,AppController就不会被实例化,{{ a+b }将不会解析为3。
<div ng-controller="ngAppDemoController">
I can add: {{a}} + {{b}} = {{ a+b }}
</div>编辑:如果不指定ng应用程序,则不能(不推荐)注册控制器。如果您只编写ng-app或ng-app="",那么您只需要使用基本的角度函数,比如:http://www.w3schools.com/angular。因此,ng-app的目标是指定注册控制器时所指的模块。
发布于 2015-06-03 14:31:00
为了明确起见,ngApp指令在AngularJS中允许您通过DOM初始化在body/html标记中自动指定应用程序的根元素,从而自动引导AngularJS应用程序。您还可以通过angular.bootstrap手动“引导”您的应用程序,以及引导多个AngularJS应用程序(只要您不嵌套它们),从而更好地控制这个初始化过程。主要的分离是您必须使用一个进程或另一个进程,这意味着单独使用ng-app或angular.bootstrap,我希望这一点很明显,因为您不希望覆盖初始化。
更深入地了解这个过程可以在这里看到:AngularJS开发人员指南:引导
就你的问题而言,这些都意味着什么呢?ng应用程序初始化只允许每个页面一个实例,这一个模块只允许一个HTML元素;而angular.bootstrap则为您提供了手动的这个功能。真正的神奇之处在于,如果您可以使用像angular.bootstrap这样的ng应用程序,那么您就可以查看ngModule了。
我想参考一个文章,它帮助我更好地理解如何利用ngModule (比如ngApp ),但是您应该注意,即使您使用ngModule,您也在不断地利用模仿和扩展ngApp的功能。因此,您可以得出结论,保留的功能将是通过X方法初始化DOM应用程序.不管您是否使用ngApp,您仍然需要处理全局问题。
让我知道它是否有帮助,或至少指出了你可以遵循的方向。
https://stackoverflow.com/questions/30622133
复制相似问题