获取角度误差未定义&未捕获错误:脚本角度Js类型中没有模块

时间:2015-06-01 10:40:14

标签: angularjs typescript

我已经实现了一个代码,我坚持这个问题。 问题1: - 未捕获的ReferenceError:未定义角度 问题2: - 未捕获错误:没有模块:CustomerSearch

我写了我的代码: -

这是我的观看页面

<view>
   <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="QuickSearch.ascx.cs" Inherits="CustomerSearch.QuickSearch1" %>
    <!DOCTYPE html>
    <%@ Register TagPrefix="dnn" Namespace="DotNetNuke.Web.Client.ClientResourceManagement" Assembly="DotNetNuke.Web.Client" %>

    <html >
    <head id="Head1" >
       <script src ="http://code.jquery.com/jquery-latest.js"></script>
        <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.8/angular.min.js"></script>
        <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script>
        <dnn:DnnJsInclude runat="server" FilePath="~/Portals/_default/Customer.Search/Contoller/QuickSearchController.js"  />
        <dnn:DnnJsInclude runat="server" FilePath="~/Portals/_default/Customer.Search/Interface/module.js"  />
       <%-- <dnn:DnnJsInclude runat="server" FilePath="~/Portals/_default/Customer.Search/app.routes.js"  />--%>

        <title></title>


        <script type="text/javascript">





        </script>
    </head>
    <body ng-app="CustomerSearch">
    <form id="form1" >
    <div>



    <div id="page"  ng-controller="CustomerCtrl as custom">

              <div id="menuleftcontent">
         <table>
                 <tr id="menu">
                               <td width="25px !important;"><input type="text" id="txtActId" value="Search" class="tftextinput2" ng-model="search.txtActId" />  </td>
                               <td><input type="button" value="Search"  class="tfbutton2" data-ng-click="search(search)" /> </td>

                         </tr>
                  <tr id="TableRow1">
                      <td colspan="2">
                          <asp:DropDownList ID="listCustomerType" runat="server" CssClass="dropdown" Width="194px" Height="27px" ng-model="search.listCustomerType">

                          </asp:DropDownList>
                      </td>
                      </tr>
              <tr>
                 <td colspan="2">
                     <input type="checkbox" id="checkActiveOnly"  class="NormalTextBox" value="Active Customers Only" ng-model="search.checkActiveOnly" />Active Customers Only
                    <br>
                      <input type="checkbox" id="checkParentsOnly" class="NormalTextBox" value="Parent Accounts Only" ng-model="search.checkParentsOnly" />Parent Accounts Only


                 </td>
             </tr>
            </table>

     <div >

    <div>
        <div>

4 个答案:

答案 0 :(得分:2)

我相信module.js包含角度控制器代码,然后在创建不同组件时使用角度对象。

module。js应在angular.d.ts文件

之后移动

答案 1 :(得分:1)

文件序列应为 jquery ,然后有角度,然后是模块文件。

说明:首先声明 jquery ,这是一个独立的库。

其次,你包括 angular ,它也是独立的,但是因为你在jquery中使用它,你希望angular知道jquery是可用的,这样angular可以利用jquery的力量。

第三个是脚本,因为它应该在已经解析角度时进行解析(从那以后只有你的角度代码才有意义)

<强>更新

  1. 您需要将模块定义为

    var CustomerSearch = angular.module(&#39; module_name&#39;)

    并在使用之前将其存储在某个变量中。我无法看到你的代码(我可能错了,因为我不知道打字稿(或者你使用的语法),但你可以检查变量是否定义了)

  2. 现在,您执行此操作的文件应位于jQuery和angularJS之后的所有JS文件的顶部。这将在您尝试使用之前定义您的模块。

答案 2 :(得分:1)

要重现此类问题,我们可以

1)“删除”角度脚本引用,或者
2)在我们的模块之后,将它放在“late”位置。

a broken plunker会向我们提供此错误:

  

未捕获的ReferenceError:未定义角度

因为我们跳过了角度脚本

<!--<script data-require="angular.js@*"
        src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.0/angular.js"
  ></script>-->        

<script src="MainApp.js"></script>
<script src="CustomerSearch.dirc.js"></script>

我们将面临同样的问题(还有很多其他错误),如果我们在页面中放置 angular (在我们的模块定义之后)。请检查此broken example

  

未捕获的ReferenceError:未定义angular(匿名函数)@ MainApp.js:1   未捕获错误:[$ injector:nomod]模块'CustomerSearch'不可用!您要么错误拼写了模块名称,要么忘记加载它。如果注册模块,请确保将依赖项指定为第二个参数。

这条线是罪魁祸首:

<script src="MainApp.js"></script>

<script data-require="angular.js@*"
        src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.0/angular.js"
  ></script>  

<script src="CustomerSearch.dirc.js"></script>

如果所有内容都在页面中正确排序,它将起作用(这是WORKING plunker):

<script data-require="angular.js@*"
        src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.0/angular.js"
  ></script>  
<script src="MainApp.js"></script>
<script src="CustomerSearch.dirc.js"></script>

这些是这类错误的标准问题......

另外,如果我们得到

  

未捕获错误:[$ injector:nomod]模块'CustomerSearch'不可用!您要么错误拼写了模块名称,要么忘记加载它。如果注册模块,请确保将依赖项指定为第二个参数。

这可能是由于own scripts

错误放置造成的
<script data-require="angular.js@*"
        src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.0/angular.js"
  ></script>  

<script src="CustomerSearch.dirc.js"></script> 
<script src="MainApp.js"></script> // this one should be before the other one

因为MainApp.js定义了模块:

var app = angular.module('MainApp', [
  'CustomerSearch'
  ]);

angular.module('CustomerSearch',[])

CustomerSearch.dric.js使用它们

var app = angular.module('CustomerSearch');

所以,我们需要先发布声明

EXTEND:

此问题的代码段:

<html >
<head id="Head1" >
    <dnn:DnnJsInclude runat="server" FilePath="~/Portals/_default/Customer.Search/app/Contoller/QuickSearchController.js"  />
    <dnn:DnnJsInclude runat="server" FilePath="~/Portals/_default/Customer.Search/app/Interface/Interface.js"  />
    <dnn:DnnJsInclude runat="server" FilePath="~/Portals/_default/Customer.Search/Scripts/angular.js"  />
    <dnn:DnnJsInclude runat="server" FilePath="~/Portals/_default/Customer.Search/Scripts/angular.min.js"  />
    <dnn:DnnJsInclude runat="server" FilePath="~/Portals/_default/Customer.Search/app/app.routes.js"  />
    <dnn:DnnJsInclude runat="server" FilePath="~/Portals/_default/Customer.Search/app/app.module.js"  />
    <script src ="http://code.jquery.com/jquery-latest.js"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.8/angular.min.js"></script>

应该(我猜)重组:

<html >
<head id="Head1" >
    // THIS MUST be first
    <script src ="http://code.jquery.com/jquery-latest.js"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.8/angular.min.js"></script>

    // MODULES must be defined first    
    <dnn:DnnJsInclude runat="server" FilePath="~/Portals/_default/Customer.Search/app/app.module.js"  />


    // the rest most likely could be as is
    <dnn:DnnJsInclude runat="server" FilePath="~/Portals/_default/Customer.Search/app/Contoller/QuickSearchController.js"  />
    <dnn:DnnJsInclude runat="server" FilePath="~/Portals/_default/Customer.Search/app/Interface/Interface.js"  />
    <dnn:DnnJsInclude runat="server" FilePath="~/Portals/_default/Customer.Search/Scripts/angular.js"  />
    <dnn:DnnJsInclude runat="server" FilePath="~/Portals/_default/Customer.Search/Scripts/angular.min.js"  />
    <dnn:DnnJsInclude runat="server" FilePath="~/Portals/_default/Customer.Search/app/app.routes.js"  />

答案 3 :(得分:1)

未知提供商几乎总是意味着:我们忘记注册我们的控制器(提供商)。

该错误与我们的设置有关

<div ... ng-controller="CustomerCtrl" ...

a broken example - 会给我们带来这种错误:

  

错误:[ng:areq]参数'CustomerCtrl'不是函数,未定义

所以,我们的代码有什么问题:

module CustomerSearch.controllers {
    var app = angular.module('CustomerSearch');

    export class CustomerCtrl {
        // ...
    }
    //app.controller("CustomerCtrl", CustomerSearch.controllers.CustomerCtrl);
}

缺少来电 app.controller("")

WORKING plunker有这个def:

module CustomerSearch.controllers {
    var app = angular.module('CustomerSearch');

    export class CustomerCtrl {
        // ...
    }
    app.controller("CustomerCtrl", CustomerSearch.controllers.CustomerCtrl);
}

(一旦我们将控制器注册到我们的应用程序),当我们在此行中使用search.aspx时没有错误:

<div id="page"  ng-controller="CustomerCtrl as custom">