requirejs Angular 似乎没有注册控制器/服务/等

2023-12-10

我有一个非常简单的 requirejs 和 Angular 演示应用程序。当我运行代码时,就好像 Angular 没有注册 homeController (即使文件确实运行并输出“来自家庭控制器的 Hello”)。令人沮丧的是几乎没有关于如何解决这个问题的调试信息。任何帮助将不胜感激!

在我的本地计算机上,我收到以下错误消息:

"Error: [ng:areq] Argument 'HomeController' is not a function, got undefined"

在 Plnkr 上我收到了不同的消息:

Error: [ng:areq]

这是 plnkr 链接http://plnkr.co/edit/zNVIYckX5dAzV3CpEzXv?p=preview

索引.html

  <body ng-app="app">
      <div ng-controller="HomeController">
        {{message}}

    </div>
    <script src="http://requirejs.org/docs/release/2.1.14/minified/require.js" data-main="main.js"></script>
  </body>

main.js

require.config({
    paths: {
        "jquery": '//code.jquery.com/jquery-2.1.1.min',
        "angular": '//cdnjs.cloudflare.com/ajax/libs/angular.js/1.2.20/angular.min',
        "angular.route": '//cdnjs.cloudflare.com/ajax/libs/angular.js/1.2.20/angular-route.min'
    },
    shim: {
        "angular": { deps: ["jquery"], exports: "angular" },
        "angular.route": { deps: ["angular"], exports: "angular.route" },
    },
    deps: ["app", "routes"]
});

//kickoff the app
require(["app", "routes" ]);

app.js

define(["angular"], function () {
    $("body").append("hello from app<br/>");
    return angular.module("app", ['ngRoute']);
});

路线.js

define("routes", ["app", "angular.route", "homeController"], function(app) {
    $("body").append("hello from angular.route<br/>");

    app.config(function($routeProvider, $locationProvider) {
        $("body").append("$routeProvider<br/>");
        $locationProvider.html5Mode(true);
        $routeProvider.when("/", {
                templateUrl: "home/home.html",
                controller: "HomeController"
            })

    });
});

homeController.js

define("homeController", ["app"], function (app) {

    $("body").append("hello from home controller<br/>");
    app.controller("HomeController", function ($scope) {
        $("body").append("hello from home controller body<br/>");
        $scope.message = "message from home controller";
    });
});

github演示:https://github.com/zouhenry/angular-requirejs-demo

我已经解决了这个问题,希望这个答案能帮助其他人。

问题是,当 dom 准备好时,Angular 将解析 html 并尝试将 HomeController 绑定到 ng-controller 指令,甚至在 requirejs 加载 homeController 文件之前也是如此。

所以我最终做的是删除 ng-app 指令索引.html。这可以防止 Angular 在页面加载时自动绑定到指令(稍后我们将以编程方式将应用程序绑定到页面)

<body ng-app="app">

因为我从 Html 本身中删除了 ng-app 。我需要以编程方式将应用程序绑定到 html。 我在Main.js

//kickoff the app
require(["app", "routes" ], function(){
   angular.bootstrap(document, ["app"]);
});

我做的最后一件事是将 require.js 移到头部,而不是将其保留在主体中(不确定这是否有必要)。这是修改后的索引.html

<html>
  <head>
    <script src="http://requirejs.org/docs/release/2.1.14/minified/require.js" data-main="main.js"></script>
  </head>
  <body>
      <div ng-controller="HomeController">
        {{message}}
    </div>
  </body>
</html>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

requirejs Angular 似乎没有注册控制器/服务/等 的相关文章

随机推荐