Angular2 - アプリの外からコンポーネントの関数を呼び出す方法
2023-09-01 17:24:36
質問
私はコールバックを持つjavascriptオブジェクトを使用しています。コールバックが発生したら、Angular2コンポーネント内の関数を呼び出したいと思っています。
例 HTMLファイルです。
var run = new Hello('callbackfunction');
function callbackfunction(){
// how to call the function **runThisFunctionFromOutside**
}
<script>
System.config({
transpiler: 'typescript',
typescriptOptions: { emitDecoratorMetadata: true },
packages: {'js/app': {defaultExtension: 'ts'}}
});
System.import('js/app/main')
.then(null, console.error.bind(console));
</script>
私の App.component.ts
import {Component NgZone} from 'angular2/core';
import {GameButtonsComponent} from './buttons/game-buttons.component';
@Component({
selector: 'my-app',
template: ' blblb'
})
export class AppComponent {
constructor(private _ngZone: NgZone){}
ngOnInit(){
calledFromOutside() {
this._ngZone.run(() => {
this.runThisFunctionFromOutside();
});
}
}
runThisFunctionFromOutside(){
console.log("run");
}
どのようにすれば runThisFunctionFromOutside これはApp.component.tsの中にあります。
どのように解決するのですか?
こちらもご覧ください どのようにangular 2のメソッドを公に公開するのですか?
コンポーネントが構築されたとき、それ自身をグローバル変数に代入させます。それから、そこから参照し、メソッドを呼び出すことができます。
その際、忘れずに
zone.run(() => { ... })
を使って、必要な変更検知の実行をAngularに通知することを忘れないでください。
function callbackfunction(){
// window['angularComponentRef'] might not yet be set here though
window['angularComponent'].zone.run(() => {
runThisFunctionFromOutside();
});
}
constructor(private _ngZone: NgZone){
window['angularComponentRef'] = {component: this, zone: _ngZone};
}
ngOnDestroy() {
window.angularComponent = null;
}
ブラウザのコンソールで
<topframe>
から
plunkerPreviewTarget....
というのは、Plunkerがコードを実行する際に
iFrame
. そして、実行
window['angularComponentRef'].zone.run(() => {window['angularComponentRef'].component.callFromOutside('1');})
または
window.angularComponentRef.zone.run(() => {window.angularComponentRef.componentFn('2');})
別のアプローチ
で説明されているように、Angular の外部でイベントをディスパッチし、Angular でそれをリッスンすることです。 Angular 2 - typescript関数と外部jsライブラリとのコミュニケーション
プランカー例2 (コメントより)
関連
-
[解決済み] コンポーネントテンプレートで要素を選択するには?
-
[解決済み] Angular Materialでのデフォルトのソート - ヘッダーのソート
-
[解決済み] angular-cliのビルドでカスタムファイルをインクルードするには?
-
[解決済み] Angular2でNgForがPipeでデータを更新しない。
-
[解決済み] Angular 2で入力タグのファイルタイプで選択されたファイルをリセットする方法は?
-
[解決済み] angular-cli server - APIリクエストを別のサーバーにプロキシする方法は?
-
[解決済み] どのようにしてangular 4のurlからparamを取得するのですか?
-
[解決済み] Angular : ルートへの手動リダイレクト
-
[解決済み] angularで1つの要素に複数のテンプレートバインディングを適用する方法 [重複].
-
[解決済み] Angularのビルドと実行方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] FormGroupから単一の値を取得する方法
-
[解決済み] Reactive Forms - フィールドをタッチしたものとしてマークする
-
[解決済み] プロパティ 'controls' がタイプ 'AbstractControl' に存在しない Angular 4 [duplicate] 。
-
[解決済み] angular keyvalue pipe sort properties / iterate in order (アンギュラーキーバリューパイプソートプロパティ / イテレートオーダー)
-
[解決済み] 角度換算2
-
[解決済み] aria-valuenow' は 'div' の既知のプロパティではないため、バインドできません。
-
[解決済み] Angularのビルドと実行方法
-
[解決済み] Angular2のTypescriptで文字列を日付に変換するには?重複
-
[解決済み] angular2でdata-*属性にバインドする方法は?重複
-
[解決済み] Angular2 RC5:「Property X」が「Child Component」の既知のプロパティではないため、「Property X」にバインドできない