我想知道如果数据库中的更改不是由当前页面上的用户操作引起的,我是否可以触发$watch
。
例如,控制器:
.MesgCtrl(...)
$scope.data = {'name': 'Tim', 'visits': 0};
$scope.$watch('data', function(newValue, oldValue) {
console.log("$watch triggered");
});
例如,在 template.html 上我有:
<ul ng-repeat="d in data">
<li>{{d}}</li>
</ul>
另一个REST端点URL获取访问的POST请求,并在数据库发生时更新它们。我希望访问计数更新 template.html ,以便用户查看数据库中的更新时间。但是,到目前为止,我只能在从同一个AngularJS控制器网址调用$watch
来更新访问而不是来自其他网址时才能$resource.save()
工作。
答案 0 :(得分:1)
如果您需要两种方式进行通信,例如当其他人访问某个页面时客户端上的更新,您可以使用像访问每个连接套接字的socket.io http://socket.io/这样的库。)
您还可以添加一个计时器,以便每隔30秒向服务器请求并获取访问计数器的更新(请使用$interval
)。
如果您只想在经过一段时间后再申请一次,请使用$timeout
。
答案 1 :(得分:0)
$interval
用于安排数据刷新,并将更改提取到Web浏览器客户端。这是我使用的代码:
conciergeControllers.controller('MessageCtrl',
function MessageCtrl($scope, $stateParams, $interval, Message, GuestMessages) {
$scope.messages = {};
$scope.getGuest = function(GuestMessages, $stateParams, $scope) {
GuestMessages.get({
id: $stateParams.guestId
}, function(response) {
$scope.guest = response;
$scope.to = response.phone_number;
$scope.messages = response.messages;
// test
console.log('Guest:', $scope.guest);
});
}
// populate initial context without a delay
$scope.getGuest(GuestMessages, $stateParams, $scope);
$interval(function(){ $scope.getGuest(GuestMessages, $stateParams, $scope); }, 5000);
}
);