angularJsプロジェクトとrequireJsの統合方法

8631 ワード

angularjs、requirejsの基礎知識についてはご自身でお勉強ください
一、簡単な事例の項目目録は以下の通りである.
-index.html
-scriptsフォルダ
--コントロールフォルダ
      --- mianController.js
      --- controller1.js
      ---controller2.js
--directivesフォルダ
      ---mainDirective.js
      ---directive.js
   --app.js
   --router.js
   --main.js
 
二、トップページ
まずあなたのindex.htmlは次のようになります.
<!doctype html>

<!-- <html xmlns:ng="//angularjs.org" id="ng-app" ng-app="webApp"> -->

<htmls>

<head>

    <meta charset="utf-8">

    <meta http-equiv="X-UA-Compatible" content="IE=edge, chrome=1">

</head>



<body>
<!-- html --> <script type='text/javascript' src='../scripts/lib/require.js' data-main='../scripts/main.js'></script> </body> </html>

トップページでhtmlはrequireJsライブラリファイルを導入し、エントリ関数mainを指定するだけです.jsは、angularjsアプリケーションを手動で起動するので、ここではトップページにng-app='webApp'を追加する必要はありません.
三、配置mian.js
require.config({

    paths:{
//
'jquery': '//cdn.staticfile.org/jquery/1.10.2/jquery.min', 'angular': '//cdn.staticfile.org/angular.js/1.2.10/angular.min', 'angular-route': '//cdn.staticfile.org/angular-ui-router/0.2.8/angular-ui-router.min','domReady': '//cdn.staticfile.org/require-domReady/2.0.1/domReady.min',
//js
'bootstrap': "../scripts/bootstrap",
'app': "../scripts/app",
'router': "../scripts/router"
..... js , }, shim:{
'angular':{ exports:'angular' }, 'angular-route':{ deps:['angular'], exports: 'angular-route' } }, deps:['bootstrap'], urlArgs: "bust=" + (new Date()).getTime() // });

requireについてconfig()の構成は大体以下の通りです(自分のプロジェクトの状況に応じて、ここでは簡単に構成しました)、
だから全体的にmain.jsこのファイルが行うことは、requirejsがすべてのファイルを非同期でロードすることです.
その中のdeps:['bootstrap']に気づいたのは、bootstrapを先にロードすることを教えてくれたことだ.jsファイル.
四、手動でangularjs応用を起動する
そしてbootstrap.jsは私がangularjsアプリケーションを手動で起動するために使用したもので、コードは以下の通りです.
define(['require',

        'angular',

        'angular-route',

        'jquery',

        'app', 

        'router'

       ],function(require,angular){

            'use strict';

            require(['domReady!'],function(document){

                angular.bootstrap(document,['webapp']);

            });

        });

ここではappに依存する.jsとrouter.js、この2つのファイルを見てみましょう.
五、ウェブサイトのルート設定
ここではui-routerを使用します.だから私たちのrouterjsは主にルーティングを定義するために使用されるべきで、ui-routerの構成については自分で関連知識を見てください.ここでは簡単に省略します.
define(["app"],

       function(app){

            return app.run([

                            '$rootScope',

                            '$state',

                            '$stateParams',

                            function ($rootScope, $state, $stateParams) {

                                $rootScope.$state = $state;

                                $rootScope.$stateParams = $stateParams

                            }

                         ])

                     .config(function($stateProvider, $urlRouterProvider, $locationProvider, $uiViewScrollProvider){

                        //    state     

                        $uiViewScrollProvider.useAnchorScroll();

                        //         

                        $urlRouterProvider.otherwise('/home');

                        $stateProvider

                        .state('home',{

                            //abstract: true,

                            url:'/home',

                            views: {

                                'main@': {

                                    templateUrl: '../view/home.html'

                                }

                            }

                        })                       

})

六、angular.module
この時、普段angularjsアプリを書いているのを見てみましょう.
var app = angular.module("xxx",["xxx"]);



app.controller("foo",function($scope){});

app.directive(...)

 
だから私たちのapp.jsはそうすべきだ
define(["angular",

        'mainController',

        'mainDirective'

       ],function(angular){

    return angular.module("webapp",['ui.router','ngStorage','ngSanitize','webapp.controllers','webapp.directive']);

})

その中で私たちのapp.jsに依存するmainControllerとmainDirectiveは主にangularのコントローラと命令をロードするために使用される
七、コントローラ
私たちのmainControllerjsはこうです
define(['controller1','controller2'],function(){});

主に各コントローラをロードするために使用されます(すべてのコントローラがこのファイルにロードされます).それ以外は必要ありません.コントローラファイルがたくさんあるので、必要に応じて追加できます.
controller1.jsファイル(他のコントローラcontroller 2ファイルと類似)
define(['../scripts/controller/module.js','jquery'],function(controllers,$){

    'use strict';

    controllers.controller('controller1',function($scope){

        //      js  

    })

})

その中でmoduleに依存する.js
そしてmodule.jsは以下の通り
define(['angular'], function (angular) {

    'use strict';

    return angular.module('webapp.controllers', []);

 });

八、指令
同じ理屈だjsも似ています.リファレンスコントローラ
九、その他