Datatable не обновляется правильно после изменения $scope

Привет, у меня проблема с Angular и Datatables. У меня есть таблица элементов, и когда приходит событие socket.io, я меняю $scope. Проблема в том, что datatable изменяет $scope, но сохраняет первые десять элементов. Так, например. У меня есть 20 элементов, затем я удаляю один, и возвращается событие socket.io. $scope обновляется, но в таблице данных теперь 29 элементов (20 - 1 новый элемент + 10 старых элементов).

Вот мой код, может у кого есть решение.

кстати. извините за мой плохой английский, надеюсь, вы понимаете мою проблему.

HTML

<table datatable="ng" dt-options="dtOptions" dt-columns="dtColumns" dt-instance="nested.dtInstance" class="table table-striped table-bordered table-hover dataTables-example">
                            <thead>
                            <tr>
                                <th>Name</th>
                                <th>Email</th>

                            </tr>
                            </thead>
                            <tbody>
                            <tr ng-repeat="tuser in allUser" ng-if="tuser.id != user.id">
                                <td>{{tuser.firstname}} {{tuser.lastname}}</td>
                                <td>{{tuser.email}}</td>

                            </tr>

                            </tbody>
                        </table>

И часть моего контроллера

function userCtrl($scope, $http, CSRF_TOKEN, SweetAlert, $location, DTOptionsBuilder, authUser, ws) {

ws.on('connect', function() {
    ws.on('userChange', function (user) {

        $scope.allUser = user;

    });
});

$scope.dtOptions = DTOptionsBuilder.newOptions()
        .withLanguageSource("//cdn.datatables.net/plug-ins/9dcbecd42ad/i18n/German.json");

var onUserComplete = function(response) {
        $scope.allUser = response.data;

    };

var getUserData = function() {

    $http.get("/api/getuserlist")
    .then(function successCallback(response) {
        onUserComplete(response);
    }, function errorCallback(response) {
        getUserData();
    });
}; ......

ws — это сервис socket.io. Итак, я получаю данные, но обновление таблицы данных работает неправильно.

Перед удалением

Перед удалением

После удаления

введите здесь описание изображения

Спасибо за помощь

Изменить

Я забыл сказать. Моя служба socket.io применяет $scope после изменений...

module.factory('ws', [ '$rootScope', function ($rootScope) {
    'use strict';
    var socket = io.connect("http://localhost:8890");

    return {
        emit: function (event, data, callback) {
            socket.emit(event, data, function () {
                    var args = arguments;
                    $rootScope.$apply(function () {
                        if (callback) {
                            callback.apply(null, args);
                        }
                        });
                    });
               },
        on: function (event, callback) {
            socket.on(event, function () {
                var args = arguments;
                $rootScope.$apply(function () {
                    callback.apply(null, args);
                });
            });
        },
        off: function (event, callback) {
            socket.removeListener(event, callback);
        }
    };
}]);

поэтому я протестировал его с обычным списком, и этот список обновился. Datatable обновляется, но сохраняет первые десять элементов, и я не знаю, почему.


person Felix Junghans    schedule 18.10.2015    source источник


Ответы (1)


Я решил проблему с

 $timeout( function() {$scope.allUser = user;}, 100);

благодаря удаленному ответу.

person Felix Junghans    schedule 18.10.2015