【问题标题】:How is possible for AngularJS to recognise the name of a module?AngularJS 如何识别模块的名称?
【发布时间】:2015-02-22 22:30:18
【问题描述】:

我目前正在学习 AngularJS,但我有点困惑。这是关于通过ng-controller 将控制器分配给视图的非常基本的练习。我的网络应用包含两个文件(index.html 和 js.js):

index.html:

<html>
<head>
</head>

<body ng-app="simpleApp">
    <h1>Welcome to my website!</h1>

    <div ng-controller="mainController">
        <h2>This is my personal website :)</h2>
    </div>

    <script src="lib/angular.js"></script>
    <script src="js.js"></script>
</body>
</html>

js.js:

var myApp = angular.module("simpleApp", []);

myApp.controller("mainController", function() {
    console.log("It controller really works!!");
});

在我看到的大多数角度示例中,角度模块的全局范围变量都具有相同的名称。但我使用不同的(myApp 用于变量,simpleApp 用于模块名称)我对代码有点奇怪,因为我分配了mainController,它是 AngularJS 通过 myApp 变量或通过 simpleApp 模块检测它?为什么ng-app=myApp 不起作用?。

谢谢。

【问题讨论】:

    标签: angularjs web


    【解决方案1】:

    语法angular.module('name', []); 创建并返回一个新模块。注意[],它定义了一个空的模块依赖集合。这很重要,因为当您创建模块时,您需要它。

    但是,您可以使用类似的语法将控制器添加到模块:

    angular.module('name').controller(...
    

    这通常是首选,因为它不会污染全局范围,并且一旦您开始跨物理文件拆分模块,它就会更有意义。

    现在回答你的问题。您的模块名称simpleApp始终是您用来指代新创建的模块的名称。 myApp 只是持有对该名称的模块的引用。

    因此,Angular 使用的名称将始终是simpleApp。您将在ng-app 中使用该名称(正如您所做的那样),以及可能需要模块名称的其他任何地方。例如,如果您将您的模块添加为另一个模块的依赖项,它将如下所示:

    angular.module('anotherModule', ['simpleApp']);
    

    通过 myApp 变量或 simpleApp 模块检测它

    Angular 正在通过名称 simpleApp 进行检测。

    【讨论】:

    • 首先,谢谢! :)。好吧,鉴于您的解释,我认为保存该模块的 myApp 变量仅在向 js.js 中的该模块添加更多控制器、模块等时是必需的,因为 index.html(具有 ng-app)直接通过模块名称),我的方式正确吗?
    • 是的,没错。但是,如果首先加载 js.js,那么之后加载的所有其他脚本将能够寻址变量 myApp。这就是我所说的污染全局范围的意思。
    猜你喜欢
    • 1970-01-01
    • 2021-08-10
    • 1970-01-01
    • 1970-01-01
    • 2013-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多