我有一个带有多个标签的Angular SPA,这些标签由模板提供。这些选项卡中的每一个都需要不同的脚本(本地和CDN),因此我只想在需要时加载脚本,即我需要将它们包含在模板(或相关控制器)本身中。
到目前为止,我尝试过这种方法:
// Start template
<data-ng-include src="http://maps.googleapis.com/maps/api/js"></data-ng-include>
// Rest of stuff
// End template
这似乎不起作用。是的,我在标题中包含了jQuery。最好的方法是什么?似乎在模板中包含脚本应该更简单。
答案 0 :(得分:1)
您可以使用任何延迟加载程序(按需加载程序)库,如requireJS,ocLazyLoad。
我已在我们的某个企业应用程序中成功实现了ocLazyLoad,因为如果您正在开发模块化单页应用程序,它提供了许多有用的功能:
所有参考资料均来自ocLazyLoad
的官方网站答案 1 :(得分:0)
如果你想包含JS。我会告诉你,请使用:
cLazyLoad JS
以下是示例:
var myapp = angular.module('myApp', ['oc.lazyLoad']);
myApp.config(function ($stateProvider, $urlRouterProvider) {
$stateProvider
.state('home', {
url: '/home',
template: '<div ui-view class="ngslide"></div>',
resolve: {
deps: ['$ocLazyLoad', function ($ocLazyLoad) {
return $ocLazyLoad.load([js/jquery.main.min.js','js/ie10-viewport-bug-workaround.js']);
}]
}
})
});
答案 2 :(得分:0)
我为此使用了一个简单的指令(这里:
DerivedB
用法是这样的:
interface AddScriptDirectiveAttributes extends IAttributes {
type: string;
src: string;
}
export function addScript(): IDirective {
return {
restrict: 'E',
link: function (scope: IScope, element: JQuery, attrs: AddScriptDirectiveAttributes) {
let script = document.createElement('script');
if (attrs.type) {
script.type = attrs.type;
}
script.src = attrs.src;
document.body.appendChild(script);
}
};
}