2016-03-23 6 views
34

したがって、私はこのスライダコンポーネントにmaterializecss javascriptを使用しています。それがレンダリングだ後だから、私は角2はテンプレートレンダリング後にスクリプトを実行します

$(document).ready(function(){ 
    $('body').on('Slider-Loaded',function(){ 
     console.log('EVENT SLIDER LOADED'); 
     $('.slider').slider({full_width: true}); 
     $('.slider').hover(function() { 
      $(this).slider('pause'); 
     }, function() { 
      $(this).slider('start') 
     }); 
    }); 
}); 

を実行する必要がある。しかし、テンプレートでtypescriptです/角度削除スクリプトタグので、このラインをどこに置くかはかなり知っている私にはありません。私はtsファイルにJQueryを組み込み、イベントシステムを使用したいと考えていましたが、それはうまくいかないようです。何か案は? AppComponent

/// <reference path="../../typings/main.d.ts" /> 
import {Component, Input} from 'angular2/core'; 
import { RouterLink } from 'angular2/router'; 
import {ServerService} from './server'; 


@Component({ 
    selector: 'slider', 
    templateUrl:'/app/template/slider.html', 
    directives: [ ], 
}) 

export class SliderComponent { 
    @Input() images; 
    private server: ServerService; 
    public constructor(server: ServerService){ 
     this.server = server; 
    } 

    ngOnInit() { 
     console.log("THROWING EVENT"); 
     $('body').trigger('Slider-Loaded'); 
    } 
} 

答えて

53

ngAfterViewInit()ルートコンポーネント後のライフサイクルコールバック角度呼び出しであり、それは子供たちがレンダリングされており、それはあなたの目的に適合する必要があります。ここではTSファイルのコードです。

も参照してくださいhttps://angular.io/guide/lifecycle-hooks

+0

ちょっと前に偶然がキャッチされていなかった理由を知っているだろうか?要素がレンダリングされなかったとしても、jqueryはイベントをキャッチすることは期待されましたが、レンダリングされていないため.sliderを操作できません。 –

+0

実際、いいえ。私はjQueryを自分で使用しません。コンポーネントが初期化されているかどうかにかかわらず、いつでも '$( 'body')。trigger(...)'が動作することを期待しています。 –

+1

こんにちは、これは古い質問ですが、 'ngAfterViewInit'フックからjQueryコードを実行しようとして問題が発生しています。実行したいコードは: '$( '#item-panel-tabs')。foundation();' '$( '#item-panel-tabs')。foundation( 'selectTab'、 'objectPanel '); ' 問題は、タブ要素(ID'#item-panel-tabs')は '* ngIf'指示文の下にあり、コンポーネントがオブジェクトを受け取ったときにのみ表示されるので、jQuery関数を呼び出すとDOMではなく、動作しません。これを修正するための提案? – Fel

0

私は、レンダリングコンポーネントの後のJavaScriptファイルを実行したかったので、それは私のために働いた(hereを報告した)この方法

export class AppComponent { 

    constructor() { 
    if(document.getElementById("testScript")) 
     document.getElementById("testScript").remove(); 
    var testScript = document.createElement("script"); 
    testScript.setAttribute("id", "testScript"); 
    testScript.setAttribute("src", "assets/js/test.js"); 
    document.body.appendChild(testScript); 
    } 
} 

を使用しました。

関連する問題