2016-05-26 3 views
0

私のバインディングが更新されないケースがあります。なぜそれが起こっているのか理解していますが、解決方法は不明です。AngularJS - 初期値がnullの場合のバインディングは更新後に更新されません

私のコントローラには、ユーザが入っていてもいなくてもよいuserというプロパティを持つcompanyオブジェクトがあります。そのユーザーは別のオブジェクトです。

これは、会社のユーザーがいない場合にのみ発生します。テンプレートにユーザーの名前を表示する場合は、{{ companyCtrl.company.user.name || 'N/A' }}を実行します。ユーザーがいないため、N/Aと表示されます。私はその後、ユーザーを割り当て、応答では、company.userを更新して、もうnullではないようにします。

ただし、私のテンプレートではまだN/Aと表示されています。最初はユーザーがいなかったので、バインディングがなかったからだと思います。

しかし、私は肯定的ではありません。ページが読み込まれたときに既にユーザーがいて、単純にユーザーを変更した場合、その名前がテンプレートで更新されます。

+0

問題を再現できるように[Plunker](https://plnkr.co/)または[JsFiddle](http://jsfiddle.net/)を作成できますか? – Win

答えて

0

私はこの説明が難しいと思っていますが、companyCtrl.company.userを新しいオブジェクトに割り当てると、テンプレート内のcompanyCtrl.company.user.nameへの参照は元のオブジェクトを指しています。まだヌルです。これを有効にするには、companyCtrl.company.userのプロパティを、オブジェクト全体ではなく、割り当てたいユーザーの値に割り当てます。

+0

私はあなたが何を意味するかを知っていると思います、それは良い点です。私は実際に更新を扱うサービスを持っています。プロパティが存在する場合は、その問題を解決するために 'angular.copy()'を行います。しかし、それはおそらく説明されていないので、nullであるプロパティのために私のコードを見なければならないかもしれません。 – kenshin9

+0

これについて考えると、companyCtrl.company.user = {}を宣言することでこれを最も簡単に解決できるはずです。コントローラーの始めに。 –

0

角度範囲外の範囲値(たとえばjQueryコールバック)を更新する場合は、角度ダイジェストを行うには$scope.$apply()または$scope.$digest()または$scope.$evalAsync()を呼び出す必要があります。

0

モデルが更新される前にダイジェストが実行されるからです。ダイジェストを強制するには、あなたのコードを$タイムアウトの中に置くことができます。

関連する問題