Ashiras, inc. blog

若手による日々奮闘記

@Input・@Output 理解の壁

あけましておめでとうございます。
今年もよろしくお願いいたします。

さて、皆様はどんな冬休みをお過ごしでしたでしょうか?
自分は
Angularの勉強中に理解に苦しむ大きな壁にぶち当たってました。(他でも高確率でぶち当たるのですが)

それは…

@Inputと@Output


1つのコンポーネントでの処理を書くことは出来たのですが分割にして@Inputと@Outputに変換してみようと。
しかし何回サンプル書いても、本や参考サイトを見ても頭の中が「???」状態。

・コンポーネント分割した時のデータのやり取りどうなってるんだ?
・イベント発生する処理の書き方、書く場所ってどこ?
・serviceっておいしいの?

などなど。

どう理解しようと苦戦してる中、図に書いて整理しようと。

画面構成

f:id:sari423:20171231014155p:plain わかりやすくInputとOutputがある簡単なタスク作成画面を構成。

list-component

機能:Input-componentで登録したタスクを表示する、表示中のタスクを削除する

input-component

機能:タスクを入力して登録する

issue-component

機能:上記2つのコンポーネントをまとめている



@Inputと@Outputの関係

f:id:sari423:20171231014240p:plain

@Input

親コンポーネント→子コンポーネント

@Output

子コンポーネント→親コンポーネント

この関係性はAngularデベロッパーズガイドで理解済。
じゃあ今の画面構成でどのコンポーネントが親で子なのか整理。

list-component → 子
input-component → 子
issue-component → 親

と、言うことは issue-component
list-componentinput-componentInput する

list-componentinput-component
issue-componentOutput する

が成立されることがわかりました。
では、図で整理。

データの流れ

f:id:sari423:20180104093609p:plain


ふむふむ…うーん???

そのやり取りしてるデータ処理はどこでしてるの?


色々調べたりしていたら以下のルールがありました。

・データは親が持っている
・serviceはデータの処理をする


これらを踏まえて再度図に書き起こしてみる。
f:id:sari423:20180104093613p:plain

自分なりに理解したこと

・Inputで受け取ったデータ、Outputで呼び出すデータは親コンポーネントと紐付いている(という言葉が適切ではないかもしれませんが)serviceが処理
・つまり処理を書くのはservice
・@Output と Emitteはセットで考えること


むん…まだまだ深いです@Inputと@Output。

最近気付いたこと

自分は元々グラフィックデザイナーでありコードがほとんど書けません。
ですので簡単な図に起こして整理したほうがわかりやすいと思いました。
(効率悪いかもしれませんが…)

2018年、修行はまだまだ続きます。