2013-09-25 21 views
1

我是新来的angularjs没有模块错误的角度与requirejs

我想要将angularjs与requirejs集成。我如何过收到错误

Uncaught Error: No module: app

这是我的设置

main.coffee

require.config 
baseUrl : "/Scripts/" 
paths : 
    jquery : 'libs/jquery/jquery-2.0.3' 
    angular : 'libs/angular/angular' 
    'angular-resource' : 'libs/angular/angular-resource' 
    bootstrap : 'libs/bootstrap/bootstrap' 
shim : 
    angular : 
     exports :'angular' 
    'angular-resource': 
     deps :['angular'] 
    jquery : 
     exports: ['jquery'] 
    bootstrap : 
     deps :['jquery'] 
    app: 
     deps :['app-boot'] 
require ['app-angular/modules/app','app-angular/modules/app-boot'], ($,angular)-> 

app-boot.coffee

require ['jquery','angular','bootstrap'], ($,angular)-> 
$(document).ready -> 
    angular.bootstrap document,['app'] 

app.coffee

define "app",['angular','angular-resource'], (angular)->  
angular.module 'app',['ngResource'] 

StudentController.coffee

require ["app"] , (app) -> 
app.controller "StudentController" , ($scope) -> 
    $scope.msg = "Hello Joy !! How are you !! You are in Angularjs" 

而且我Index.cshtml

<div class="page-content"> 
<div ng-controller="StudentController"> 
    <p ng-bind="{{msg}}"> 
    </p> 
</div> 

但是它给人的错误Uncaught Error: No module: app

我也从html中删除了ng-app也在domready上手动引导角度。那么我哪里错了?

回答

1

我认为你需要反转该位的代码的依赖性:

app: 
    deps :['app-boot'] 

它周围的方式:

'app-boot': { 
    deps: ['app'] 
} 

app-boot.coffee文件取决于模块app被定义上app.coffee档案

+0

所以,你的意思是说,首先模块必须启动,然后应用程序需要引导? – Joy

+0

是的,我相信。在你的代码中,首先需要发生'var app = angular.module(“app”,[],function($ routeProvider,$ locationProvider){//你的代码在这里});'然后你可以这样做'角。bootstrap(document,[“app”]);' - 我知道我是用纯JavaScript而不是CoffeScript写的,但我相信你会明白:) –

0

看起来你跟着这guide,这是双加好。

我能够得到它的工作,但不断得到相同的错误信息,因为在我的Angular控制器中,'app'没有被定义。它出现在“app.controller”不被设置在那里,为指导州,只是通过“需要”语句足以加载它。

require(['jquery', 'underscore', 'backbone', 'users', 'angular', 'directives', 'app']

这是只有一点点不同比你的。

/* shim */ 
require.config({ 
shim: { 
    underscore: { 
     exports: '_' 
    }, 
    backbone: { 
     deps: ["underscore", "jquery"], 
     exports: "Backbone" 
    }, 
    "angular":{ 
     exports:"angular" 
    }, 
    "directives":{/* this is my custom Angular directive */ 
     deps:["angular"] 
    } 
} 
}); 

/* RequireJS module */ 
define("app", ["angular", "directives"], function(angular) 
{ 
    var app = angular.module("app", ["zipppyModule"]); 

    angular.element(document).ready(function() 
     { angular.bootstrap(document,['zippyModule']); }); 
}); 

/* 'app' loads the module */ 
require(['jquery', 'underscore', 'backbone', 'users', 'angular', 'directives', 'app'] 
+0

是的,你可以通过require声明并传递模块名称。但是我做了一个不同的方法。我在main.js中创建了'deps:['app/app']'',它实际上包含了所有必需的模块。有多种方式可以实现这一点。由于requirejs模块非常灵活,所以可以以各种方式使用它 – Joy