RequireJS正在加载angular应用程序,但没有't创建app.controller
RequireJS is loading angular app, but doesn't create app.controller
我已经设置了一个非常基本的环境,用于使用RequireJS加载AngularJS组件(由Bower管理)。我的index.html
非常基础:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Angular Resource Test</title>
</head>
<body>
<div ng-controller="MyCtrl">
<ul>
<!-- this template is not populated -->
<li ng-repeat="item in items">{{item}}</li>
</ul>
</div>
<script type="text/javascript" src="bower_components/requirejs/require.js" data-main="scripts/main"></script>
</body>
</html>
我的RequireJS都在main.js
中,看起来像这样:
requirejs.config({
baseUrl: 'bower_components',
paths: {
'angular': '../bower_components/angular/angular',
'angular-resource': '../bower_components/angular-resource/angular-resource'
},
shim: {
'angular': {
exports: 'angular'
},
'angular-resource': {
deps: ['angular'],
}
},
});
define("app", ["angular", "angular-resource"], function(angular) {
var app = angular.module('MyApp', ['ngResource']);
return app;
});
require(["app"], function(app) {
console.log(app); // this works
app.controller("MyCtrl", ['$scope', '$resource',
function($scope, $resource) {
console.log("hello"); // this doesn't work
$scope.items = [1, 3, 4, 5];
}
]);
});
似乎所有依赖项都已解析并加载,Angular应用程序正在实例化。但是,我无法注册Angular控制器。回调函数中的console.log()
语句没有执行,所以控制器创建似乎完全失败了?
/编辑:
将ng-app
指令添加到<body>
会产生以下错误:
未捕获错误:[$injector:moduler]未能实例化模块MyApp,原因是:错误:[$injector:nomod]模块"MyApp"不可用!您拼错了模块名称或忘记加载它。如果注册模块,请确保将依赖项指定为第二个参数。
你可以在GitHub上找到完整的项目,如果这能让它更清晰的话。
在您的代码中有一些事情应该/可能会被更正。
- 缺少
angular.bootstrap(document, ['MyApp']);
。因为当您使用requireJS时,angular.bootstrap()
是一种需要。加载脚本时,要求先获取init,而不是angular获取init。这会导致你的应用程序崩溃。为了使其工作,您需要等待require init=>,然后它将加载angular up并初始化angular=>。完成所有操作后,引导您的应用程序 define()
应该包装模块/文件的所有代码require()
用于调用模块/文件- 要求使用JS将模块分离成文件。因此,如果你能很好地配置它,它将更容易管理,并可能改善应用程序的加载时间。通过在文件中放入许多模块。你破坏了requireJS的使用目的。(例如,我已经构建了一个应用程序,它的代码、插件和html总量约为3MB。但在第一次加载页面时,它只有400kb,很酷,呵呵?)
您可以尝试以下内容:
requirejs.config({
baseUrl: 'bower_components',
paths: {
'angular': '../bower_components/angular/angular',
'angular-resource': '../bower_components/angular-resource/angular-resource',
'app' : '../scripts/app' // 'app' is the module name. It got defined by define() block, and can be loaded by either require() or define() block
},
shim: {
'angular': {
exports: 'angular'
},
'angular-resource': {
deps: ['angular'],
}
},
});
require(["app"], function(app) {
console.log(app);
app.controller("MyCtrl", ['$scope', '$resource',
function($scope, $resource) {
console.log("hello"); // this doesn't work
$scope.items = [1, 3, 4, 5];
}
]);
angular.bootstrap(document, ['MyApp']);
});
以及在您的app.js 中
define(["angular", "angular-resource"], function(angular) {
var app = angular.module('MyApp', ['ngResource']);
return app;
});
您已经加载了angular,但尚未引导它由于您是动态加载脚本的,因此使用ng-app属性不是一个选项所以你需要打电话给
angular.bootstrap(document.body, ['app']);
参见https://docs.angularjs.org/api/ng/function/angular.bootstrap
相关文章:
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- 为effect Composer创建GodRays效果过程
- 从javascript创建一个列表
- onkeyup无法动态创建多个文本区域
- 如何使用javascript从主svg对象动态创建svg视图框
- 如何访问声音管理器2创建的声音对象
- 我已经创建了一个jquery转盘,并使用if条件来运行和停止转盘
- Kendo:我该如何在树视图中创建一个递归的hieiarchy
- 使用Facebook live API创建实时视频对象时的隐私设置
- 在动态创建的元素上获取对特定选择器的引用
- 如何创建带有插槽的vue js组件预加载程序
- 如何在创建键时引用来自同一对象的键
- 如何创建JSON数组
- 如何为通过ng-view指令或ng-controller指令创建的每个新作用域设置侦听器
- RequireJS正在加载angular应用程序,但没有't创建app.controller
- 使用 jQuery(view) 创建的 cookie 在第一次尝试时无法在 php(controller) 中访问
- 如何测试用module().controller创建的angularjs控制器?
- 如何将数据从controller绑定到chartjs折线图,以创建动态折线图
- 停止AngularJs创建新的controller/$scope缓存,并使用已缓存的缓存
- 在Controller - sails.js中创建一个HTTP请求