我在如何在用户界面上显示我在数据库中更改的内容方面做了噩梦。我有这种情况,我需要选择某些标题,然后我会点击一个将改变其状态的按钮。
问题是,当我选择标题然后单击更改状态按钮时,它不会自动反映在UI上。这是我的更新功能。
$scope.updateTitleStatus = function(statusId, cp){
ContentAssessmentService.updateSelectedTitles($scope.selectedTitles, statusId);
$scope.selAll = !$scope.selAll;
$scope.selectedTitles = [];
};
这是我的服务。
this.updateSelectedTitles = function(selectedTitle, statusId){
var self = this;
_.forEach(selectedTitle, function(selectedTitle){
ContentAssessmentFactory.updateSelectedTitleStatus(selectedTitle.id, statusId);
});
};
这是我的数组,它是存储的选定标题。
$scope.selectedTitles = [];
你能告诉我如何使用$ watch功能吗?我不知道该怎么做。我已经做到了这一点,但它没有用。
$scope.$watch(function($scope){
return $scope.selectedTitles;
}, function(newValue) {
$scope.selectedTitles = newValue;
console.log(newValue);
});
当我点击更改状态按钮时,我只需要立即更新UI而不刷新页面(这是我的最后一个选项,但是尝试不这样做)。
答案 0 :(得分:3)
您将不得不使用轮询或websocket连接。 $ watch不会“监视”您的数据库。它会监视通常绑定到视图的@scope变量,并对那里的更改做出反应。听起来你正在寻找更像meteor.js的东西,它保持一个开放的websocket,并在数据库从另一个客户端,后台进程等更改时动态更新视图。这些是完全不同的事情。要使用角度来实现这种行为,最简单的方法是逐步轮询您的api并在api为您提供修改后的数据时以角度更新模型。