RequireJ无法随机加载脚本
RequireJs fail to load scripts randomly
我有一个HTML模板(来自themeforest),它有很多jQuery插件和一个main.js,所有这些插件都是为模板实例化和配置的。我正在基于该模板创建一个AngularJS应用程序,并使用RequireJS加载我的脚本。在模板的index.html中,我加载了require-config.js文件。80%的情况下,应用程序加载很好,但另20%的情况下会出现类似"jQuery不是函数"或"$(…).menu不是函数"的错误。这是我的档案。有人能找出我做错了什么吗?
<script type="text/javascript" src="js/jquery-lib.js"></script><!-- Jquery Library -->
<script type="text/javascript" src="js/jquery-migrate-1.3.0.min.js"></script>
<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?sensor=false"></script>
<script type="text/javascript" src='js/mapbox.js'></script>
<script type="text/javascript" src='js/leaflet.markercluster.js'></script>
<script type="text/javascript" src="js/build.min.js"></script>
<script type="text/javascript" src="lib/chosen/chosen.jquery.js" ></script>
<script type="text/javascript" src="js/jquery-ui.js"></script>
<script type="text/javascript" src="lib/slick/slick.min.js"></script>
<script type="text/javascript" src="lib/jquerym.menu/js/jquery.mmenu.min.all.js"></script>
<script type="text/javascript" src="lib/Magnific-Popup-master/jquery.magnific-popup.min.js"></script>
<script type="text/javascript" src="lib/jQuery.filer-master/js/jquery.filer.min.js"></script>
<script type="text/javascript" src="js/bootstrap-rating.js"></script>
<script type="text/javascript" src="lib/popup/js/classie.js"></script> <!-- Popup -->
<script type="text/javascript" src="lib/popup/js/modalEffects.js"></script> <!-- Popup -->
<script type="text/javascript" src="js/main.js"></script>
最后一个是main.js,所有内容都在这里初始化。所以现在,在我的index.html中,我有这个:
<script data-main="require-config" src="bower_components/requirejs/require.js"></script>
我的require-confing.js看起来像这个
require.config({
paths: {
jquery: 'js/jquery-lib',
jquerymigrate: 'js/jquery-migrate-1.3.0.min',
rating: 'js/bootstrap-rating',
build: 'js/build.min',
mapbox: 'js/mapbox',
leaflet: 'js/leaflet.markercluster',
chosen: 'lib/chosen/chosen.jquery',
jqueryui: 'js/jquery-ui',
slick: 'lib/slick/slick.min',
jquerymenu: 'lib/jquerym.menu/js/jquery.mmenu.min.all',
magnific: 'lib/Magnific-Popup-master/jquery.magnific-popup.min',
fileLoader: 'lib/jQuery.filer-master/js/jquery.filer.min',
main: 'js/main',
angular: 'bower_components/angular/angular',
angularRoute: 'bower_components/angular-route/angular-route',
angularMocks: 'bower_components/angular-mocks/angular-mocks',
angularTranslate: 'bower_components/angular-translate/angular-translate',
angularTranslateLoadProvider: 'bower_components/angular-translate-loader-static-files/angular-translate-loader-static-files',
text: 'bower_components/requirejs-text/text'
},
shim: {
'jquery': {
'exports': 'jquery'
},
'jquerymigrate': {
deps: ['jquery']
},
'build': {
deps: ['jquery']
},
'mapbox': {
deps: ['jquery']
},
'leaflet': {
deps: ['jquery', 'jquerymigrate']
},
'chosen': {
deps: ['jquery']
},
'jqueryui': {
deps: ['jquery']
},
'slick': {
deps: ['jquery', 'jqueryui']
},
'fileLoader': {
deps: ['jquery']
},
'js/bootstrap-rating': {
deps: ['jquery'],
'exports': 'rating'
},
'jquerymenu': {
deps: ['jquery'],
'exports': 'jquerymenu'
},
'magnific': {
deps: ['jquery']
},
'main': {
deps: ['jquery', 'jqueryui', 'build', 'mapbox', 'chosen', 'fileLoader', 'rating', 'jquerymenu', 'slick', 'magnific']
},
'angular': { 'exports': 'angular' },
'angularRoute': ['angular'],
'angularTranslate': ['angular'],
'angularTranslateLoadProvider': ['angularTranslate'],
'angularMocks': {
deps: ['angular'],
'exports': 'angular.mock'
}
}
最后我的应用程序像这个
define([
'angular',
'angularRoute',
'angularTranslate',
'angularTranslateLoadProvider',
'jquery',
'build',
'mapbox',
'leaflet',
'chosen',
'jqueryui',
'rating',
'slick',
'jquerymenu',
'fileLoader',
'main',
'view1/view1',
'view2/view2'
], function (angular, angularRoute, view1, view2, angularTranslate, angularTranslateLoadProvider) {
// Declare app level module which depends on views, and components
return angular.module('myApp', [
'ngRoute',
'pascalprecht.translate',
'myApp.view1',
'myApp.view2'
]).config(['$routeProvider', '$translateProvider', function ($routeProvider, $translateProvider) {
$routeProvider.when('/menu', {
resolve: {
"prevent": function () {
window.location.href = window.lastPath;
}
}
}).otherwise({ redirectTo: '/view1' });
$translateProvider.useStaticFilesLoader({
prefix: 'translations/',
suffix: '.json'
});
$translateProvider.preferredLanguage('es');
}]);
});
根据我的,这是问题
define
中的顺序应与function
中的参数匹配。
例如,
define(['module1', 'module2',......, 'moduleK'], function(module1, module2,...., moduleK){
});
回调中参数的顺序应该与define
中要求模块作为依赖项的顺序相匹配
因此,您的代码应该是这样的;
define([
'angular',
'angularRoute',
'angularTranslate',
'angularTranslateLoadProvider',
'jquery',
'build',
'mapbox',
'leaflet',
'chosen',
'jqueryui',
'rating',
'slick',
'jquerymenu',
'fileLoader',
'main',
'view1/view1',
'view2/view2'
], function (angular, angularRoute, angularTranslate, angularTranslateLoadProvider, $, build, mapbox, leaflet, chosen, jqueryui, rating, slick, jquerymenu, fileloader, main, view1, view2) {
.....
相关文章:
- Google Adsense多次加载脚本
- 如何准确执行加载脚本&退出弹出窗口
- RequireJ无法随机加载脚本
- 通过浏览器加载页面时触发加载脚本(js或jQuery)'s”;返回“;作用
- 在以前的文件夹中加载脚本
- 如何重新加载脚本标记
- 正在脚本中加载脚本
- 在pjax完成其工作时加载脚本
- I'我用setTimeout加载脚本,你能找到一个更快的方法吗
- 在页面模板上加载脚本
- 如何在我的情况下创建加载脚本
- 当用$.getScript()加载脚本时,有一种方法可以从用$.get script()装载的脚本中调用父脚本中的函数
- 延迟加载 脚本加载和/或执行
- 如何使用谷歌页面速度CSS加载脚本延迟多个CSS文件
- 最后加载脚本
- 如何基于HTML中的类加载脚本
- 在局部视图中加载脚本文件
- 如何防止在使用hapi.js reply().hold()时重新加载脚本
- 异步加载脚本
- 脚本加载脚本广告