2013-09-25 23 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