2

私は私の約束の奇妙な振る舞いをしています。次のプランクを参照してください: http://plnkr.co/edit/uBuBS3Oi7mIPob2jtqkm

これは、Marc Galgleish の非常に優れた記事 ( http://markdalgleish.com/2013/06/using-promises-in-angularjs-views/ ) のプランクに基づいています。

私のコントローラーには、messages という名前の単純な $scope 属性があります (サービスから defer オブジェクトを取得します)。

angular.module('myModule', [])
.controller('HelloCtrl', function($scope, HelloWorld) {
  $scope.messages = HelloWorld.getMessages();

  $scope.click = function()
  {
    alert($scope.messages[0]);
  }
});

予想どおり、約束が(解決ごとに)満たされた後、ビューは実際の値を取得して表示しています。しかし、ボタンをクリックしてクリック機能を実行すると、期待どおりに $scope.messages を使用できません。約束はそこで解決されるのではなく、ビューだけで解決されます。

と ( http://plnkr.co/edit/vX3dSFjzB6R7q4Oed7Gj )

HelloWorld.getMessages().then( function(data){
  $scope.messages = data;
});

すべて正常に動作しますが、それは私にとっては解決策ではありません。私の実際のアプリケーションでは、サーバーとの同期が必要な場合は、既に同期され、キャッシュされた複雑なオブジェクト (ローカル ストレージから) または promise のいずれかを返すサービスです。同期後に更新されたオブジェクトを返します。

何か案は?

事前にThxクヌート

4

1 に答える 1

3

Promise は解決された後も Promise のままです。

これを試して:

$scope.click = function()
{
  $scope.messages.then(function(msgArray) {
    alert(msgArray[0]);
  });
}
于 2013-07-18T22:41:51.327 に答える