質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.62%

  • Angular2

    170questions

Angular2 2つのTypescriptに同じメソッドを持っている場合どちらが処理されるか?

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 201

enoeno

score 3

Angular2のソースをトレースしていて不明な点があったので教えてください。

2つの入力欄を持っている画面について、そのhtmlファイルには

  • 入力欄1のデザインのみ書かれている。(html1とします)
  • 入力欄2はselectorが書かれている。

selectorに関連付いているコンポーネントとセットになっているhtmlをhtml2とします。

  • html1とTypeScript1
  • html2とTypeScript2

という組み合わせです。

今、TypeScript1と2の両方に共にonBlurKanaというメソッドが書かれています。全く異なる処理ロジックです。

入力欄2のhtmlのinputのblurイベントにはonBlurKanaが指定されています(html2)。

<input (blur)="onBlurKana($event.target.value)"/>


この場合、どちらのonBlurKanaメソッドが処理されるのでしょうか?
ちなみにhtml1にはblurイベントはありません。(onBlurKanaでサーチしても出てこない)

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

ご記載にある通り、
html1とTypeScript1
html2とTypeScript2
この組み合わせであることが確実なら、どう考えてもTypeScript2が呼び出されると思うのですが。

Angular2に限らずですが、全ソースの中から指定メソッドを探し出して実行する機能はありません。
必ずhtmlとTypeScriptの紐づけがあるはずですので、紐づけがないソースに同じメソッドがあったとしても呼び出されることはありません。

一応紐づけがわからない場合の確認方法を提案しておきますね。
まず初めにトレースの際はデバッグはできないのでしょうか?
片方のメソッドの中にalertを入れて、どちらが起動するかなど基本的なデバッグを実行できるなら行ってみてください。

また、2つの同名メソッドで、"全く"処理が異なるロジックということですが、引数は同じですか?
htmlタグのメソッド呼び出しを見ると引数が指定されていますので、これも判断基準になるかと思います。

あとは片方のTypeScriptのメソッド名を変更して処理落ちするかで判断することもできるかと。

ソースのトレースということで、投稿者様が作成したソースではないのでしょう。
そもそも論ですが、全く処理が異なるのに、同名メソッドを同一システム内に存在させるのは基本的にはナンセンスです(特殊な例もあるかもしれませんが・・・)ので、変更できる機会があるのならぜひ変更してみてください。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/10/02 11:51

    回答ありがとうございます。

    ----
    そもそも論ですが、全く処理が異なるのに、同名メソッドを同一システム内に存在させるのは基本的にはナンセンスです(特殊な例もあるかもしれませんが・・・)ので、変更できる機会があるのならぜひ変更してみてください。
    ----

    Angular以外のつたない経験からですが、私もそのように思っていました。が、最新技術ということで何か仕組みでもあるのかと思い確認させていただいたしだいです。

    ちなみに、Javascriptですと同じ名前の場合はhtml内にコードされた(<script src=~)順番で下に書かれた方が優先されると理解していますが、Angularにはそういったものはないのでしょうか?

    キャンセル

  • 2017/10/05 10:36

    すみません、回答が遅れました。
    AngularはあくまでJavascriptフレームワークであって、かつ、TypeScriptはコンパイルするとJavascriptになるというものなので、開発者が使用する(実装する)書式はコンポーネント思考フレームワークAngularに則ったTypeScriptになりますが、実際の書式(動いてるもの)はただのJavascriptです。
    なのでAngularでコードされたものの読み込み順を変更してしまうような仕組みが存在すると、コンパイルしてJavascriptに置き換わったとき、読み込めなくなってしまうので、基本的にJavascriptと処理方式が全く異なるものはないと思っておいて大丈夫かと。

    キャンセル

  • 2017/10/05 11:11

    再度のご回答ありがとうございます。
    すっきりしました。

    トレース中のコードはもちろん触れないため、QuickStartを少しいじってマネしてやってみようと四苦八苦していました。console.log()を仕込んで呼ばれ方も見てみました。回答のとおり、TypeScript2のonBlurKanaは呼ばれませんでした。

    ※QiuckStartにとても苦労しました。まず動かないww。日本語訳してくれている方がいたのでそれのとおりにやったら全くダメで、結局英語のまま読んでやり直しました。スンナリいきました。英語の解説は日本語訳と随分変わっており、多分日本語ページを作成してくれた方が翻訳したときはAngular2だったのでしょうね。その手順で今のAngularバージョンのQuickStartキットをダウンロードしたためかもしれません。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.62%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Angular2

    170questions