我有一个由多个开发人员开发的网站,该网站有多个页面。每个“页面”通过调用angular.module(等)来初始化角度。
我的问题是,所有页面共享一些模块,有些页面使用特定模块。实现这一目标的最佳做法是什么?我是否相信开发人员会插入整个网站所需的正确模块(即Google Analytics),或者我是否创建了一个共享我所有加载所有模块的页面的调用。还有办法做到这两点吗?例如,初始化所有页面所需的模块,然后在各自的页面上动态加载特定模块。
答案 0 :(得分:7)
我会创建一个由每个应用程序加载的全局模块,就像加载'ngAnimate'之类的模块一样......全局模块可以初始化所有页面共有的功能,例如Google分析。
这需要对所有涉及的开发人员进行一些监管,但这是一个很好的做法,通过代码审查等。
示例页面:
angular.module('individualPage', [
'globalModule',
'customPageModule'
]).config(
// etc
);
全球模块:
angular.module('globalModule', [
'googleAnalytics'
]).config(
// etc
);
答案 1 :(得分:4)
我有一个由多个开发人员开发的网站,该网站有多个页面。每个“页面”通过调用angular.module(等)来初始化角度。
我的问题是:
我不知道处理多个页面时的最佳做法。 恕我直言,创建多个页面现在是一个不好的做法。我想 具有不同视图和状态而非Web的Web应用程序(SPA) 网页脱节的网站。所以,如果你选择去 SPA(单页面应用)方式,你可以加载你所有的核心/常见 应用程序引导之前的模块。需要的视图/页面 特定模块可以使用类似的东西来延迟加载它们 oclazyload
我不能说很多关于信任的问题,因为我不了解你 开发人员很好。一般来说,开发人员永远不会 值得信赖,他们会做任何看似有效的事情,高五 他们自己并称之为一天。您的想法是“信任但验证” 不必电话轻拍他们的电话或阅读他们的电子邮件,但从来没有 永远把你的目光从主要的git或svn存储库中移开。无处不在,如果 你按照我上面建议的SPA来使用oclazyload,你会的 只需要担心动态加载'view / page'具体 开发人员可以自行配置的模块。
是的,是的,我已经概述了...... SPA方法 以上。我还建议使用angular-ui-router 国家和观点的方法。我们的想法是设计您的应用程序 同时将其视为桌面或移动胖客户端 状态转换等等。
答案 2 :(得分:2)
我有一个由多个开发人员开发的网站,该网站有多个页面。
每个"页面"通过调用angular.module(等)来初始化角度。
我的问题是,所有页面共享一些模块,有些页面使用特定模块。
实现这一目标的最佳做法是什么?
我相信开发人员会插入整个网站所需的正确模块(即Google Analytics) 或者我是否创建了一个共享我所有加载所有模块的页面的调用。
还有办法做到这两点吗? 例如,初始化所有页面所需的模块,然后在各自的页面上动态加载特定模块。
我首先要定义页面是什么。
您是在谈论 SPA 还是更传统的设置,客户端在具有常规<a href="/page">
的网页之间进行转换,
服务器为客户端提供一块HTML?
如果后者属实,那么我建议您重新考虑您对Angular应用程序的基本方法。
最佳(或更确切地说,首选)的做事方式是为客户端提供单个HTML,然后 页面之间的转换(从现在开始,我将它们称为状态),使用ngRoute,angular router (2)或 更好 - ui-router。
实现这一目标的最佳做法是什么?
按照目前的情况,我会坚持认为没有针对您提出的案例定义的最佳做法。 有很多方法可以做到,就我而言,核心开发团队/社区标准都没有正式推荐。
您可以使用webpack-angularjs-lazyload,requirejs (angular-requirejs-seed),requirejs (angularAMD),SystemJS等。 选择你喜欢的毒药!
我相信开发人员会插入整个网站所需的正确模块(即Google Analytics) 或者我是否创建了一个共享我所有加载所有模块的页面的调用。
如果网站上需要angular.module
中包含的代码,我会将其附加到主应用程序模块。
如:
/** Define core functionality that _is_ essential to the application running as expected **/
angular.module('core-module', [ 'route-definitions', 'http-interceptors', 'google-analytics' ]);
/** Inject the core functionality into a bundle module **/
angular.module('main-bundle-module', [ 'core-module' ]);
/** Bootstrap the bundle module as your application **/
angular.bootstrap(/* DOM element */, ['main-bundle-module']);
现在,每当有人为特定状态创建 new 模块时,他们都需要将所述模块注入main-bundle-module
(禁止延迟加载的模块)。
因此,在您的Google Analytics案例中,核心功能将始终提供并可用。从某种意义上说,你只是撕毁了
信任障碍。
退一步,让我们暂时假设你不使用SPA - 你实际上正在重新初始化 每页转换的角度应用(坏移动)。您如何确保始终存在所需的功能?
angular.module
方法。注意:这不是官方支持的,要警惕你在做什么。在我看来,它也违背了模块化的目的,但我还是会 展示这样做的方式。
我估计你可以选择两种方式:
&#34; Good Cop&#34;
(function(angular) {
// The always required module(s).
var ALWAYS_REQUIRED = ['cs.core'];
// Keep a reference to the original angular.module function.
var originalFn = angular.module;
// Keep track of registered modules.
var registered = {};
angular.module = function (name, dependencies, configFunction) {
var loaded;
// Ensure that we are always working with an array of dependencies.
dependencies = dependencies || [];
// If the module has not already been registered
if (!registered[name]) {
// Ensure that the required modules are available.
ALWAYS_REQUIRED.forEach(function (required) {
if (dependencies.indexOf(required) === -1) {
dependencies.push(required);
}
});
// Register the module and store it in the registered object for future reference.
loaded = registered[name] = original(name, dependencies, configFunction);
} else {
// Do not re-register the module, simply load it as per 'angular.module('name_of_module')';
loaded = original(name);
}
// Return the loaded module.
return loaded;
};
})(angular);
&#34; Bad Cop&#34;
(function(angular) {
var ALWAYS_REQUIRED = ['cs.core'];
var originalFn = angular.module;
angular.module = function (name, dependencies, configFunction) {
ALWAYS_REQUIRED.forEach(function (required) {
if (dependencies.indexOf(required) === -1) {
throw new Error('You need to add ' + required + ' to ' + name + '\'s module dependencies!');
}
});
return originalFn(name, dependencies, configFunction);
};
})(angular);
这是杀死信任问题的两种方法,但在此过程中我们引入了代码;
还有办法做到这两点吗? 例如,初始化所有页面所需的模块,然后在各自的页面上动态加载特定模块。
我想说最好的方法是:
core
功能的独立模块,并将其附加到ng-app
/ angular.bootstrap
模块。 答案 3 :(得分:-4)
您可以尝试browserify在单个文件中加载和构建您的javascript。 有了这个,您可以轻松缩小javascript代码,还可以加载nodejs模块,如事件等,但这不是您的问题。