Phonegap,AngularJS和RequireJS

时间:2014-05-07 12:16:24

标签: javascript angularjs cordova requirejs

我试图整合AngularJS + RequireJS来制作一个Phonegap项目。我已经在PC上运行,但是当我在Phonegap中构建项目时,我在LogCat中遇到了这些错误:

  

05-07 13:55:38.008:E / Web Console(10987):未捕获错误:脚本错误:angular   05-07 13:55:38.008:E / Web Console(10987):http://requirejs.org/docs/errors.html#scripterror at file:///android_asset/www/libs/require.js:138

     

05-07 13:55:45.058:E / Web Console(10987):未捕获错误:模块加载超时:ui.router   05-07 13:55:45.058:E / Web控制台(10987):http://requirejs.org/docs/errors.html#timeout at file:///android_asset/www/libs/require.js:138

Index.html

<script src="libs/require.js"></script>
<script>
  require(['require', './js/config-require'], function (require, config) {
    config.urlArgs = 'bust=v0.4.0';
    window.require.config(config);

    require(['./js/main.js']);
  });
</script>

配置-require.js

define({
  paths: {
    'angular'       : '../libs/angular',
    'async'         : '../libs/async',
    'domReady'      : '../libs/domReady',
    'ngResource'    : '../libs/angular-resource',
    'ui.router'     : '../libs/angular-ui-router'
  },

  shim: {
    'angular': {
      'exports': 'angular'
    },
    'ngResource': ['angular'],
    'ui.router' : ['angular']
  }
});

main.js

define([
  'require',
  'angular',
  './app'
], function (require, angular) {
  'use strict';

  require(['domReady!'], function (document) {
    angular.bootstrap(document, ['app']);
  });
});

app.js

define([
  'angular',
  'ui.router',
  './config',
  './modules/home/index'
], function (ng) {
  'use strict';

  return ng.module('app', [
    'app.constants',
    'app.home',
    'ui.router'
  ]).config(['$urlRouterProvider', function ($urlRouterProvider) {
    $urlRouterProvider.otherwise('/');
  }]);

});

任何人都可以帮我配置它吗?

2 个答案:

答案 0 :(得分:0)

解决方案是在config-require.js文件中设置baseUrl

答案 1 :(得分:-1)

使用 SeaJs + AngularJs 代替

最近我试图在cordova中实现requirejs。我在这里查看了大部分相关文章,这些解决方案都没有。

所以我转向尝试Seajs,Seajs遵循CommonJS Spec,与Nodejs完全相同。

Sea.js 源代码中,将define替换为global.define = Module.define,隐藏全局seajs.define = Module.define方法。

index.html中的

<script type="text/javascript" src="sea-debug.js"></script>
<script>
seajs.config({
    alias: {// similar to shim as in requirejs
    "angular": "lib/angular.js"
    }
});
seajs.use('app.js', function(app) {
    app();
});
</script>
app.js中的

seajs.define(function(require, exports, module) {
    module.exports = function() {
        require('angular');//angular is loaded, you can use angular directly
        var app = angular.module('App',[]);
        require('./test.js')();//test test test
    };
});

在test.js

seajs.define(function(require, exports, module) {
    module.exports = function() {
        console.log('test test test');
    };
});

然后你准备好了!