Javascript 在Angular 2项目中添加.js脚本
我正在使用Angular 2框架构建一个web应用程序,我想使用一个外部模板() 我需要在我的组件模板中运行一些脚本(jquery.min.js,bootstrap.js,…),但如果我将其放入脚本标记中,则无法运行 如果我在index.html中运行scripts标记,它会工作,但当我浏览到另一个页面时,脚本不会重新加载 如何加载模板中没有脚本标记的脚本 index.htmlJavascript 在Angular 2项目中添加.js脚本,javascript,html,angular,typescript,Javascript,Html,Angular,Typescript,我正在使用Angular 2框架构建一个web应用程序,我想使用一个外部模板() 我需要在我的组件模板中运行一些脚本(jquery.min.js,bootstrap.js,…),但如果我将其放入脚本标记中,则无法运行 如果我在index.html中运行scripts标记,它会工作,但当我浏览到另一个页面时,脚本不会重新加载 如何加载模板中没有脚本标记的脚本 index.html <!doctype html> <html> <head> <meta
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Angular2App</title>
<base href="/">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" type="image/x-icon" href="favicon.ico">
<!-- Facebook and Twitter integration -->
<meta property="og:title" content="" />
<meta property="og:image" content="" />
<meta property="og:url" content="" />
<meta property="og:site_name" content="" />
<meta property="og:description" content="" />
<meta name="twitter:title" content="" />
<meta name="twitter:image" content="" />
<meta name="twitter:url" content="" />
<meta name="twitter:card" content="" />
<!--<link href="build/main.css" rel="stylesheet">-->
<link href="https://fonts.googleapis.com/css?family=Roboto:300,400,700" rel="stylesheet">
<!-- Animate.css -->
<link rel="stylesheet" href="assets/css/animate.css">
<!-- Icomoon Icon Fonts-->
<link rel="stylesheet" href="assets/css/icomoon.css">
<!-- Themify Icons-->
<link rel="stylesheet" href="assets/css/themify-icons.css">
<!-- Bootstrap -->
<link rel="stylesheet" href="assets/css/bootstrap.css">
<!-- Magnific Popup -->
<link rel="stylesheet" href="assets/css/magnific-popup.css">
<!-- Owl Carousel -->
<link rel="stylesheet" href="assets/css/owl.carousel.min.css">
<link rel="stylesheet" href="assets/css/owl.theme.default.min.css">
<!-- Theme style -->
<link rel="stylesheet" href="assets/css/style.css">
// SCRIPTS THAT I NEED TO LOAD
<!-- Modernizr JS -->
<script src="assets/js/modernizr-2.6.2.min.js"></script>
<!-- FOR IE9 below -->
<!--[if lt IE 9]>
<script src="assets/js/respond.min.js"></script>
<![endif]-->
<!-- jQuery -->
<script src="assets/js/jquery.min.js"></script>
<!-- jQuery Easing -->
<script src="assets/js/jquery.easing.1.3.js"></script>
<!-- Bootstrap -->
<script src="assets/js/bootstrap.min.js"></script>
<!-- Waypoints -->
<script src="assets/js/jquery.waypoints.min.js"></script>
<!-- Carousel -->
<script src="assets/js/owl.carousel.min.js"></script>
<!-- countTo -->
<script src="assets/js/jquery.countTo.js"></script>
<!-- Magnific Popup -->
<script src="assets/js/jquery.magnific-popup.min.js"></script>
<script src="assets/js/magnific-popup-options.js"></script>
<!-- Main -->
<script src="assets/js/main.js"></script>
// SCRIPTS THAT I NEED TO LOAD
</head>
<body>
<app-root></app-root>
</body>
</html>
app.routing.module.ts
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { HttpModule } from '@angular/http';
import { routing } from './app.routing.module';
import { AppComponent } from './app.component';
import { HomeComponent } from './home/home.component';
import { LoginComponent } from './login/login.component';
@NgModule({
declarations: [
AppComponent,
HomeComponent,
LoginComponent
],
imports: [
BrowserModule,
FormsModule,
HttpModule,
routing
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule {
}
import { Routes, RouterModule } from '@angular/router';
import { HomeComponent } from './home/home.component';
import { LoginComponent } from './login/login.component';
const routes: Routes = [
{
path: 'login',
component: LoginComponent
},
{
path: 'home',
component: HomeComponent
},
{
path: '',
component: LoginComponent
},
{
path: '**',
component: LoginComponent
}
];
export const routing = RouterModule.forRoot(routes);
app.component.ts
import { Component } from '@angular/core';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
}
app.component.html
<router-outlet></router-outlet>
我认为在angular 2组件中加载脚本标签是不允许的,但看看这一点,它可能会对您有所帮助
组件模板中不允许使用脚本标记。在
index.html
中包含脚本应该可以使它们全局可访问。当你说你正在浏览另一个页面时,不清楚你的意思是什么,但是如果你将angular router与路由器插座一起使用,你导入的所有脚本都应该可以访问。如果你使用angular CLI,你可以在中包含.js
节点\u模块中的文件
在样式
数组的正下方和环境源
的上方,您应该可以看到脚本
数组。我已经包含了一点JSON(我已经截断了它),作为您的参考
{
"apps": [
{
"root": "src",
"outDir": "dist",
"assets": [
"assets",
"favicon.ico"
],
"index": "index.html",
"main": "main.ts",
"styles": [
"styles.scss"
],
"scripts": [
"../node_modules/hammerjs/hammer.min.js"
],
"environmentSource": "environments/environment.ts",
"environments": {
"dev": "environments/environment.ts",
"prod": "environments/environment.prod.ts"
}
}
]
}
谢谢你的回答。正如您所看到的,我已经在我的index.html
中包含了脚本,并且第一页工作得非常完美。。。问题是当我路由到另一个页面时,需要加载相同的脚本(从登录页面到主页)。页面加载正常,没有错误,但由于未加载脚本,页面保持空白。如果刷新浏览器,页面将再次正常显示。正如你所说,我使用了带
的角度路由器。我用我的app.component
、app.module.ts
和app.routing.module.ts
更新了这个问题。我注意到如果我启用切换设备工具栏
(在Chrome DevTools视图中)这个问题消失了。我要补充一点,使用JQuery和SPA时会出现的一个问题是,在DOM呈现完成时,JQuery和Bootstrap通常会绑定它们的所有侦听器。由于SPA在不刷新页面的情况下加载内容,因此您可能需要在ngAfterViewInit
生命周期挂钩期间手动将侦听器添加到新绘制的组件。重要的是,您必须重新启动ng serve
以有效加载样式/scriptsA也可用于避免多次加载可能的重复