2017-01-14 10 views
5

Angular 2フレームワークのWebアプリケーションを構築していて、外部テンプレート(https://freehtml5.co/preview/?item=splash-free-html5-bootstrap-template-for-any-websites)を使用したいと思います。Angular 2プロジェクトで.jsスクリプトを追加

私のコンポーネントテンプレートでいくつかのスクリプト(jqery.min.js、bootstrap.js、...)を実行する必要がありますが、スクリプトタグに入れても機能しません。 スクリプトタグをindex.htmlで実行すると動作しますが、別のページスクリプトを参照するとリロードされません。

テンプレートにスクリプトタグなしのスクリプトをロードするにはどうすればよいですか?

index.htmlを

<!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.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 { 
} 

app.routing.module.ts

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> 

答えて

0

スクリプトタグは、コンポーネントのテンプレートで許可されていないあなたを助けるかもしれ角度2つのコンポーネント内のスクリプトタグを読み込みが許可されていないと思いますが、これを見てみましょう。 index.htmlにスクリプトを含めると、これらのスクリプトにグローバルにアクセスできるようにする必要があります。 router-outletで角度ルータを使用する場合は、インポートするすべてのスクリプトにアクセス可能でなければなりません。

+0

回答ありがとうございます。あなたが見ることができるように、私は 'index.html'にスクリプトを含めました。最初のページは完全に動作します...問題は、ログインページからホームページに同じスクリプトをロードする必要がある別のページにルーティングするときです。ページはエラーなしで正常に読み込まれますが、スクリプトがロードされていないため、ページは空白のままです。ブラウザをリフレッシュすると、ページは再び正常に表示されます。私は、あなたが言ったように ' 'で角度ルータを使用しました。私は 'app.component'、' app.module.ts'と 'app.routing.module.ts'で質問を更新しました。 – NightWnvol

+0

「Toggle Device Toolbar」(Chrome DevToolsビューで)を有効にすると、問題が消えてしまうことに気付きました。 – NightWnvol

8

Angular CLIを使用している場合はnode_modulesのファイル.angular-cli.json.js個のファイルを含めることができます。

stylesアレイの直下、environmentSourceの上には、scriptsアレイが表示されます。 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" 
     } 
    } 
    ] 
} 
+0

SPAでJQueryを使用する際に発生する問題は、通常、JQueryとBootstrapはDOMのレンダリングが完了したときにすべてのリスナーをバインドするということです。 SPAはページをリフレッシュせずにコンテンツをロードするので、 'ngAfterViewInit'ライフサイクルフック中に新しく描画されたコンポーネントにリスナを手動で追加する必要があります。 – MichaelSolati

関連する問題