LoginSignup
19
19

More than 5 years have passed since last update.

スコープを理解する

Last updated at Posted at 2014-02-22

スコープ継承は単純で、あなたはそれが起きていることを知る必要さえない。子スコープの内部から、親スコープで定義されたプリミティブな値の 2wayデータバインディングを試すまでは。
https://github.com/angular/angular.js/wiki/Understanding-Scopes

プリミティブな値をng-modelにすると期待する動作しない場合がある

プリミティブ値だけじゃなく、親に未定義の値は親に反映されない

つまりスコープ継承はJavaScriptのプロトタイプ継承と同じ

子スコープに値がなければ親スコープを参照する。
プリミティブな値を保存すると子スコープに保存される。すると、親スコープの同名プロパティにはアクセスできなくなる。なぜなら子スコープにあるから。

子スコープでオブジェクトのプロパティだけを変更するなら、子スコープにはオブジェクトが未定義なので、強制的に親スコープを参照することができる。

この時注意しなければならないのは、子スコープに直接オブジェクトを代入してしまうこと。例えばこんな風に$scope.obj = {} 。子スコープで定義してしまうと、$scope.objで取得できるのは子の方。親で定義したプロパティは取得できなくなる。ちなみに子の方でdeleteすれば消せるそうです。

解決策

  • ng-modelには常に “.” を使用する。ng-model=“user.name”
  • 関数でやりとりする

参考

19
19
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
19