2017-11-02 4 views
0

私は自分のシステムログのように私のサービスの変更を見たいと思っています。ログインする人はログインする必要があります。

dashboard.controller

function getLogs() { 
    return dataservice.getLogs().then(function (data) { 
    vm.logs = data; 
    return vm.logs; 
    }); 
} 

dataservice.js

function getLogs() { 
    return $http.get('/api/timeLogs') 
    .then(success) 
    .catch(fail); 

    function success(response) { 
    return response.data; 
    } 

    function fail(e) { 
    return exception.catcher('XHR Failed for getPeople')(e); 
    } 
} 

私はこれを試してみたが、確認したい場合は、そのは

$scope.$watch('dataservice.getLogs()', function() { 
    getLogs(); 
}, true); 

答えて

1

をこれはあなたの観察可能なパターンの場合でありますサービスの変更を購読する

app.service('dataservice', function($http) { 
    var subscribers = []; 
    var addSubscriber = function(func){ 
     subscribers.push(func); 
    } 
    var notifySubscribers = function(){ 
     for(var i = 0; i< subscribers.length; i++){ 
      subscribers[i](); //invoke the subscriber 
     } 
    }; 

    var addLog = function(){ 
     //let's say that the logs are added here 

     //then notify the subscribers that a new log has been added 
     notifySubscribers(); 
    }; 

    var getLogs = function() { 
     return $http.get('/api/timeLogs') 
     .then(success) 
     .catch(fail); 

     function success(response) { 
     return response.data; 
     } 

     function fail(e) { 
     return exception.catcher('XHR Failed for getPeople')(e); 
     } 
    }; 

    return { 
     addSubscriber: addSubscriber, 
     addLog: addLog, 
     getLogs: getLogs 
    } 
}); 

は、その後、あなたのコントローラ内のサービスに

dataservice.addSubscriber(function(){ 

    console.log('new log added'); 
    dataservice.getLogs(); 
}); 

NOTEを加入者機能を追加します。これはまたRxJsライブラリ

+0

私はちょうど私がgetLogsをどこで呼び出すのか混乱しています。私はまだあなたの答えを適用しようとしています。 – Priz

+0

@Prizサービスにサブスクライバを追加するgetLogsを呼び出す必要があります。新しいログが追加されたときに、サービスサプライバーアレイに追加されるすべての関数が呼び出されます(私の例では) –

+0

私はあなたの答えについてのアイデアを得ていると思いますが、私が仕事をしたいのはリアルタイムデータを扱うようなものです。あなたの答えを使ってfacebookのような通知サービスを作成できますか?私の言うことは通知カウンターのようなものですか? – Priz

1

を動作していないし、データの変更を取得するサーバーでは、サービスはそれを目的としたものではありません。ポーリングサービスを使用してください。

サーバーから(例えば)ごとに1秒をチェック:

例:

$interval(function() { 
    dataservice.getLogs().then(function(data) { 
     vm.logs = data; 
    }); 
}, 1000); 

またはより良いくらい:

getLogs = function() { 
    dataservice.getLogs().then(function(data){ 
    vm.logs = data; 
    $timeout(getLogs, 1000) 
    }); 
} 
+0

他の方法がないで行うことができます?私は効率的ではないように見えるので、1秒ごとにサーバーに要求を送信したくありません。 – Priz

+0

$ scope。$ watch関数は$ scopeのすべての変更をチェックします。Angularはダーティチェックを使用しています。 – Fetrarij

+0

私はあなたの答えを試みたが、私はそれを使用することができない私の要求ローダーが表示され続けると、ログテーブルは下向きスクロールダウンし、フィルタを使用することはできませんが、とにかく私はポーリングについて検索しようとします。 – Priz

関連する問題