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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Angular

Angularは、JavaScriptフレームワークです。AngularJSの後継であり、TypeScriptベースで実装されています。機能ごとに実装を分けやすく、コードの見通しが良いコンポーネント指向です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

Q&A

2回答

1791閲覧

複数のクラス間で値を共有、更新したい

nekorisu8150

総合スコア11

Angular

Angularは、JavaScriptフレームワークです。AngularJSの後継であり、TypeScriptベースで実装されています。機能ごとに実装を分けやすく、コードの見通しが良いコンポーネント指向です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

0グッド

1クリップ

投稿2018/07/25 00:13

複数のクラス間で値を共有、更新したい

JavaScriptで(TypeScriptで)、ある値を複数のクラス内で参照、及びいずれかのクラスから更新し、常に同じ値を共有できるようにしたいです。
更新処理をするクラスは限られているので、グローバルで定義はなるべくしたくないです。
経験が少なく初歩的な点かもしれませんが、ご教授いただけないでしょうか。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

回答ではなく助言?程度にとらえてください。


値と言うと語弊があるかもしれないので、変数(classも含む)として説明します。

component間で変数を共有するという意味でも大きく分けて2種類あります。

  • 1.変数のみを共有する
  • 2.変数が変更されたら、それをトリガーとして値を変更する。

1の場合は変数が変更されても描画は変更されても処理としては動作しない。
通販で例えると「カートの内部component」が変更された場合は、「決算component」の合計値を変更したい場合などです。

2の場合はAコンポーネントのボタンを押した場合にBコンポーネント内のイベントを発火させたいときなどです。

1の場合で多くのcomponentで変数を共有したい場合はservice化し、同一の変数を参照させる方法があります。
2の場合は@Inputで親から子に、@Outputで子から親にイベント発火させることができます。

また1の場合で親から子への一方通行の場合は@Inputのみで対応可能です。

投稿2018/07/26 13:13

mosapride

総合スコア1480

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nekorisu8150

2018/08/05 06:50

ありがとうございます。 再現したいcomponentは親子関係にないため、助言いただいた1.の内容でservice化して試してみました。 試したところ、常に参照渡しになっているのか、service化させた変数は意図して更新させようとせずとも常に変更後の値を持っていました。 これはAngularの性質なのでしょうか。あるいは、関数を作ってそれを呼ばなければ更新されないように制御することができるでしょうか。
keisukeh

2018/08/13 12:55

DIのさせかたによります。 angularにはDIコンテナという依存性を注入する仕組みがあります。 同じ値を参照しているということはコンポーネントを読み込んでいるngModuleのprovidersのところにサービスを書いているのではないでしょうか? providersに指定する場所や、記述の仕方によって同一インスタンスを持つのか、同じサービスの別インスタンスを持つのか変わってきます。 また同一インスタンスを参照している場合、javascriptの性質上、object関連のも(Object、Array, Functionなど)のはすべて参照渡しになるので変更した値は同じものを参照している別のオブジェクトに影響します。 もしコンポーネントからサービス内のプロパティを直接参照している場合、もう少し別のやり方にしてみたほうがいいかもしれません。
guest

0

共有するクラスに、適当な方法で、共有したい変数を参照渡しする。
共有するデータをクラスでラッピングすると見通しが良い形になるのではないでしょうか。

投稿2018/07/25 01:13

t_obara

総合スコア5488

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問