如何仅在数据库发生更改时更新角度视图

Posted

技术标签:

【中文标题】如何仅在数据库发生更改时更新角度视图【英文标题】:how to update angular view only there is a change on database 【发布时间】:2016-04-13 05:03:40 【问题描述】:

仅当我在数据库中搜索的表发生更改时,我才需要更新我的 ng-repeat。如您所见,我目前每 700 毫秒在角度上使用 $interval 执行此操作:

var app = angular.module("games", []);

app.factory('app', ['$http', function($http, $interval) 

var obj=;
obj.getGames = function()  
    return $http.get('ajax/gameread.php');

return obj;

]);

app.controller("gamesCtrl", function($scope, $interval, app) 
    $interval(callInterval, 700);
    function callInterval()
    app.getGames().then( function(data) 
    $scope.games = data.data;
    ); 
  
);

还有html

 <div class="col-xs-8">
            <table ng-app="games" ng-controller="gamesCtrl" class="gametable">
            <tbody>
            <tr>

                <td id="box-title-games"><div class="left leftbox"><p class="sbold">Active Games</p></div> <a href="#"><div id="addgame" class="rightbox rightboxchar right"><p><i class=" fa fa-plus"></i> Add Game</p></a></div></td>
            </tr>
                <tr class="ops" ng-repeat="game in games">
                <td id="gamesli">game.game_p1 game.gamebet <span class="last"><a href="gameplay/game.game_id" target="_blank" class="enter"><span class="letter-format-table">Enter</span></a></span></td>
                </tr>
                </tbody>
                </table>
        </div>

ajax/gameread.php 的输出是一个 json,其中包含我需要的每个表信息。

但是这样做的目的是每 700 毫秒更新一次视图,正如您在我使用 $interval 的控制器上看到的那样。我想要做的不是使用 $interval,而是使用在 ng-repeat 上添加新的 &lt;TD&gt; 如果创建了新游戏或删除 &lt;TD&gt; 如果该内容已更改,如下所示:

if(new game on table games) 在 html 上添加一个带有信息的新 td

if(gamestatus changed on table games) delete that TD from html

【问题讨论】:

【参考方案1】:

只要您正确操作游戏集合,视图就会相应更新。

【讨论】:

是的,它会,但如果集合没有被操纵,它会不断更新现有的 TD,这很烦人,因为它看起来像在闪烁,你不能选择它们的文本,因为每 700 毫秒(当它再次更新)您的选择将消失

以上是关于如何仅在数据库发生更改时更新角度视图的主要内容,如果未能解决你的问题,请参考以下文章

值更改时角度组件不更新

数据库中的视图比较

QTableView() 仅在选择时更新更改

一旦AngularJs中的数据库发生变化,如何实现自动视图更新?

合并 - 仅在值更改时更新

Docker如何仅在发生更改时运行pip requirements.txt?