【问题标题】:Angular application name not identified未识别角度应用程序名称
【发布时间】:2016-01-12 15:49:22
【问题描述】:

我正在尝试使用以下示例代码为数据库访问定义一个工厂:

    MyApp.service("DB_Services", [ "$http" , function($http) {

        DB_Services.Get_Data_from_DB_Internal = function (p_Request) {

            var http = new XMLHttpRequest();
            var url  = "http://localhost/servlet/Test_ui";
            var params = "data=" + p_Request ;
            http.open("POST", url, true);

            //Send the proper header information along with the request
            http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

            if(http.readyState == 4 && http.status == 200) {
                    return http.responseText ;
                }
        }
        http.send(params);    
        

        return DB_Services ;
    }]);

我应该补充一点,这段代码部署在一个单独的文件中,该文件列在 index.html 中的 <script src=...> 条目中。

加载时(以及在使用它之前!),我收到以下错误(Chorme 的控制台):未捕获的 ReferenceError: MyApp 未定义。

当然,MyApp 与所有控制器中使用的名称完全相同,因此不会出现拼写错误。

此外,如果我将“MyApp”更改为其他内容,例如“TestName”,我会收到相同的错误,只是这次未定义的是 TestName。

我无法弄清楚语法错误是什么。

【问题讨论】:

  • 如何通过 MyApp 引用您的模块名称? MyApp = angular.module('myApp') ?以及MyApp 的范围是如何设置的?
  • MyApp 定义在哪里?

标签: javascript angularjs factory


【解决方案1】:

此答案基于您在 index.html 中的单独 <script> 文件中引导 Angular 应用程序(例如 angular.module('myApp'))的假设

检查您的<script> 文件的顺序

您需要确保您的初始 Angular 设置代码出现在任何其他 Angular <script>s 之前。

<head>
    .....
    <script>
         var myApp = angular.module('myApp', [])
    </script>

    <script src="otherNg.js">
    <script src="anotherNg.js">

请务必在其他 &lt;script&gt; 文件中正确引用您的模块

为了正确地向您的myApp 模块添加额外的结构,您需要确保正确地访问它。由于它是在另一个文件中定义的,因此您需要使用以下语法来访问它:

 var myApp = angular.module('myApp')
 .service("DB_Services", [ .... ])

请注意,此代码不包含数组的第二个参数...这是因为这是获取已定义模块的 getter 语法。

【讨论】:

  • 是的!!!在index.html 中更改工厂声明的位置就成功了。现在,我有一个不同的问题:当以blabla = DB_Services.Get_Data_from_DB_Internal ("dummy"); 调用函数时,我收到错误 TypeError: Cannot read property 'Get_Data_from_DB_Internal' of undefined。尝试了不同的语法但没有成功。
  • 这听起来像是注入问题。假设您在控制器中使用 DB_Services,您需要确保将其作为可注入依赖项添加到控制器函数的参数中。顺便说一句,如果此答案解决了最初的问题,请考虑将其标记为正确答案。您可以针对注射问题提出单独的问题,因为它超出了此问题的范围。
【解决方案2】:

确保在脚本文件中引用该模块

var MyApp = angular.module('MyApp');
MyApp.service(...);

这与最初定义模块时不同

angular.module('MyApp',[]);

根据经验,这不取决于 .html 中脚本文件的顺序,例如:

<script src="javascripts/services/DB_Services.js"></script>
<script src="javascripts/app.js"></script>

只要您在 DB_Services.js 脚本中引用该模块,它就可以正常工作。角度会做数学!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-23
    • 2013-07-09
    • 1970-01-01
    • 2020-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多