9

これは、この質問と同様の質問です。ディレクティブの非同期データに関するいくつかの問題がまだ見られます。基本的に、データを渡したいディレクティブがあり、このデータは非同期でフェッチされます。次のように、ディレクティブのスコープ プロパティを使用してこれを開始しました。

scope: {
    myAsyncData: '='
}

リンク関数に を追加した$watchので、スコープ内の値に基づいてモデルを更新できました。このようなもの:

scope.$watch(scope.foo, function() {
    //logic based on myAsyncData
}

これを行ったとき、非同期データがまだ返されていなかったため、javascript エラーが発生し始めました。これが、上記のリンクにある質問を投稿するきっかけになりました。それで、私は次に私の$watchものを次のように変更しました:

scope.$watch(scope.foo, function() {
    if (angular.isDefined(scope.myAsyncData))
    {
        //logic based on myAsyncData
    }
}

これを行うと、javascript エラーは発生しません。ただし、$watchデータが返されたときに再度実行されないため、ビューにモデルが正しく反映されません。$scope.fooデータが返された後にウォッチをトリガーするために aを割り当てようとしました$timeoutが、タイミングに依存しすぎているようで、あまり堅牢ではありません。

私の質問は、ディレクティブで非同期データを操作する正しい方法は何ですか? 次のようなディレクティブでデータを取得する例をいくつか見ました。

scope.$eval(attrs.myAsyncData);

これは何も変わらないようです。上記と根本的に違う点はありmyAsyncData: '='ますか?

サービスを介してデータを取得するだけでよいのではないかと考え始めましたが、まったく同じ問題があるようです。ディレクティブでデータを直接取得することも考えましたが、データの取得に責任を持つようにディレクティブを使用したくありません。ユーザーがデータを操作するときに、ディレクティブがデータの表示とビューの更新を担当するようにしたいだけです。

これをどのように行うべきかについて明らかな何かが欠けている可能性があるため、ご意見をいただければ幸いです。

4

3 に答える 3