【问题标题】:How to use $watch to see changes when updating a database record更新数据库记录时如何使用 $watch 查看更改
【发布时间】:2015-05-18 02:39:50
【问题描述】:

关于如何在 UI 上显示我在数据库中所做的更改,我一直在做噩梦。我有这种情况,我需要选择某些标题,然后我将单击一个按钮来更改其状态。

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

【问题讨论】:

  • 为什么不创建一个工厂,在用户单击按钮后向数据库发出请求并返回数据?如果您愿意,我可以为您编写一个快速示例工厂。

标签: javascript angularjs scope underscore.js


【解决方案1】:

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

【讨论】:

  • 是的。我有一个向 UI 显示数据的范围。现在,当我单击更改状态时,它将更改数据库记录,并更改范围变量内的内容。现在我要问的是如何观察该变量的变化?变量的名称是 $scope.filteredTitles
  • 也许我可以说我有。我已经可以以表格的方式显示我的数据了。例如,显示的某个标题的状态为可用。当我选择它并单击 NOT AVAILABLE 按钮时,它应该立即出现在页面上,它不可用而不刷新它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-18
  • 1970-01-01
  • 1970-01-01
  • 2016-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多