如何使用$ watch在更新数据库记录时查看更改

时间:2015-05-18 02:39:50

标签: javascript angularjs scope underscore.js

我在如何在用户界面上显示我在数据库中更改的内容方面做了噩梦。我有这种情况,我需要选择某些标题,然后我会点击一个将改变其状态的按钮。

问题是,当我选择标题然后单击更改状态按钮时,它不会自动反映在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而不刷新页面(这是我的最后一个选项,但是尝试不这样做)。

1 个答案:

答案 0 :(得分:3)

您将不得不使用轮询或websocket连接。 $ watch不会“监视”您的数据库。它会监视通常绑定到视图的@scope变量,并对那里的更改做出反应。听起来你正在寻找更像meteor.js的东西,它保持一个开放的websocket,并在数据库从另一个客户端,后台进程等更改时动态更新视图。这些是完全不同的事情。要使用角度来实现这种行为,最简单的方法是逐步轮询您的api并在api为您提供修改后的数据时以角度更新模型。