使用没有值的ng-app

时间:2015-06-03 13:51:43

标签: angularjs

通常,您会在页面上看到使用ng-app="myModule"等指令初始化Angular,但仅使用ng-app是有效的。但是,由于控制器之类的内容已在myModule注册,因此只使用ng-app是否有用?如果您没有指定模块ng-app="..."

,是否有办法注册控制器等

3 个答案:

答案 0 :(得分:4)

在Angular 1.3之前(当你可以在全局范围内定义控制器时),Angular能够自动发现全局定义的控制器。

从Angular 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()启用此行为。也就是说,Angular团队试图阻止我们从一开始就以这种方式定义控制器,应该避免:

  

注意:虽然Angular允许您在全局范围内创建Controller函数,但不建议这样做。在实际应用程序中,您应该将Angular模块的.controller方法用于您的应用程序[...]

答案 1 :(得分:0)

阅读第一个示例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-app,则无法(不推荐)注册控制器。如果您只是编写ng-app或ng-app =&#34;&#34;,那么您只需获得基本的角度函数即可,例如:http://www.w3schools.com/angular。因此,ng-app的目标是指定注册控制器时您所指的模块。

答案 2 :(得分:0)

要明确的是,AngularJS中的ngApp指令允许您通过DOM初始化自动指定body / html标记中应用程序的根元素来自动引导AngularJS应用程序。您还可以通过angular.bootstrap手动“引导”您的应用程序,以及引导多个AngularJS应用程序(只要您不嵌套它们),就可以更好地控制此初始化过程。主要的分离是你必须使用一个进程或另一个进程,分别表示ng-app或angular.bootstrap,我希望这是显而易见的,因为你不想覆盖初始化。

可以在此处更深入地了解此过程:AngularJS Developer Guide: Bootstrap

现在这对你的问题有什么意义呢? ng app初始化只允许每页一个实例,每个HTML元素一个模块;而angular.bootstrap手动为您提供此功能。如果你可以使用像angular.bootstrap这样的ng-app,真正的魔力就在于此。所以在这种情况下你可以看一下ngModule。

我想引用article帮助我更好地理解如何利用像ngApp这样的ngModule,但是你应该注意,即使你使用ngModule,你仍然在不断利用模仿ngApp的功能并扩展它。因此,您可以得出结论,将保留的功能将是通过X方法进行DOM应用程序初始化...无论您是否使用ngApp,您仍然需要处理大局。

让我知道它是否有所帮助,或者至少指出了你可以遵循的方向。