当theres改变时,观看服务

时间:2017-11-02 05:45:25

标签: javascript angularjs

我想在我的系统日志中观察我的服务中的更改,当有人登录getlogs函数时必须触发如何实现这一点???

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);

2 个答案:

答案 0 :(得分: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)
  });
}

答案 1 :(得分: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();
});

注意:这也可以使用RxJs

完成