我想在我的系统日志中观察我的服务中的更改,当有人登录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);
答案 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库
完成