質問: function() { console.log($scope.plan_name); }; ### 試したこと ng-ifをng-showに切り替えると上手くいきます
回答: このような場合はng-ifは利用できず、ng-showを利用する必要があります。 ng-ifが付与された要素が非表示になったとき、その要素はDOMから削除されますので、ng-modelの値はその瞬間に削除されます。 そのため、例え初期状態で画面表示されていて値が取得できていたとしても、一度非表示にするとその時点で値は取得できなくなり、再度表示しても以前の値は再取得できません。 急にng-modelの値が取得できなくなったのは恐らく、今まで初期画面で表示されていたng-ifの要素を初期画面で非表示にしたか、今まで非表示の制御をしていなかったのを、非表示にするという動作をコード上に実装したからではないでしょうか? 常時表示していれば、ng-ifの要素であっても値は取得できるものと思われます。 前述の動作から、非表示にする可能性のある要素の値が常時必要であれば、その要素に対しng-ifを使用することは残念ながら不可能ということになります。 ご自身でも試されたようですが、そのような場合ng-showを利用することになります。 これは非表示のときにもDOMから要素が削除されず、画面上で見えなくする属性を一時的に付与するという動きをしますので、ng-modelで参照していても値が途中で消えてしまうようなことはありません。