2017-01-23 7 views
1

逆数$watchを角度で使用できますか?

私の問題

私は、角-翻訳使用して、私は不足しているすべての翻訳に$http.putを使用したいです。しかし、私はこのエラーを取得:この問題を解決するには

"10 $digets() iterations reached" when trying to $http.post() from ng-translate error handler

私のソリューション

、私は配列を作成していると私はそれにすべての行方不明の翻訳のIDをプッシュします。ページが準備できたら、配列を私のバックエンドに置いて、IDをチェックしてデータベースに保存します。

私の質問

しかし、どのような角度で配列に不足している翻訳をプッシュする準備ができたとき、私は知っていますか、ページが他の言葉で、準備ができたとき、私は知っていますか?私は逆$watch関数を考えていたので、配列/コレクションに何も書き込まれていないとき、関数が呼び出されました。 これは可能でしょうか、これを解決する良い方法がありますか?

私は、表示するコードを全く持っていない、すべてのコードが$httparray.push

+0

「ページが準備ができています」と言えば、ページがサーバーからデータを受け取った後であることを意味しますか?もしそうなら、最初に返された後に次の関数を実行するために非同期関数を使ってみましたか? – Callum

+0

_.debounceのようなものが好きかもしれません。 – Daniel

+0

データが取得されるまで待つことです。$ httpアクションを使用している場合は、 '.then()' promiseコールバックを使用して、応答が正常に受信されるとすぐにコードを実行することができます。 '$ http.get(" api/someEndpoint ")。次に(関数(レスポンス){this.someControllerArray = response.data});' –

答えて

0

のような基本的な機能であるため、controllerがテンプレートにデータをフェッチし、結合終了したかどうかを確認するために多くのソリューションは、翻訳id文字列がある場合によっては、あります。エンドポイントから来るか、最初にテンプレートに存在し、私はこれらの方法をお勧めします:

  • This answer
  • This answerがをチェックして、テンプレート内のdiectivesの使用を示し
  • あなたは次のようなthen()catch()finally()は応答して適切な行動をとることを約束するコールバックを使用することができ、あなたには、いくつかのタイプの$httpコールを作っている場合は、特定の時間
0

を定義せずに$timeoutを使用することができます:

$http.put('api/someEndpoint').then(function(response) { 
    // $scope.someArray.push(response.data); 
    // this.someArray.push(response.data); 
}); 

あなたの翻訳やアイテムがNG-繰り返しにあなたはNGリピートの終了時に関数を実行し、EVを発するこのanswerに基づくことができている場合$on$scopeまたは$rootScope)を使用して、それらを聞きながら$emitを使用します。

このIDでアイテムにデータを設定する方法は完全にはわかりませんが、これは1つの方法です。

うまくいけば助けてください!

0

ここで私はあなたがタグ付けした他のstackoverflow質問からいくつかのアイデアを得ることに取り組んだ小さなデモです。https://embed.plnkr.co/anL7unrSAB21hdLPMoxG/

翻訳サービスのuseMissingTranslationHandlerに私たちのプロセスをフックしているので、ページが用意できたら心配する必要はないと思います。以下は、付属のデモプランナーのコードスナップです。

angular 
    .module('app', ['pascalprecht.translate', 'ngCookies']) 
    .service('customTranslationHandlerService', ['$http', function ($http) { 

    this._queue = {}; 

    /* queue items to push to server ....*/ 
    this.pushToQueue = function (missingTranslationId) { 
     if (!this._get(missingTranslationId)) { 
     this._set(missingTranslationId); 
     } 
     this._start(); 
    } 
    }]) 
    .factory('customTranslateMissingTranslationHandlerLog', ['customTranslationHandlerService', function (customTranslationHandlerService) { 

    return function (translationId) { 
     customTranslationHandlerService.pushToQueue(translationId); 
    }; 
    }]) 
    .config(['$translateProvider', function ($translateProvider) { 

    $translateProvider.useMissingTranslationHandler('customTranslateMissingTranslationHandlerLog'); 
    }])