How to fix grid data custorm not refresh in Angularjs

I want to search/filter value in data grid. But when i get reponse data success but grid not refresh.

I try using angularjs custom datasource like https://js.devexpress.com/Demos/WidgetsGallery/Demo/DataGrid/CustomDataSource/AngularJS/Light/
Now i think proplem in grid not refresh affter binding data.
httmp index :

<div class="x_content form-common-css">
        <div class="row">
            <div class="col-sm-12" ng-init="returnUrl='ManageAccount'">
                <div class="pull-right">
                    <div class="input-group">
                        <div class="input-group-prepend">
                            <div dx-button="{type: 'success', icon: 'add',hint:'@(Localizer["CreateAccount"])', onClick: onClickAdd}" style="float:right;margin-right:10px;"></div>
                        </div>
                        <div id="txtSearch" dx-text-box="{mode:'search', placeholder:'@(Localizer["Search"])', onValueChanged: onChangeValueSearch,onEnterKey: onEnterKeySearch}" class="width-auto"></div>
                    </div>
                </div>
            </div>
            <div class="col-sm-12">
                <div id="grdManagerAccount" dx-data-grid="grdOptions" class="mrBotton-10" dx-item-alias="dataItem"> </div>
            </div>
        </div>
    </div>

Data source, i wanna try filter in Api when using “textSearch” and get.
Data reponse like resuilt :{RecordTotal: int , Records:[]}

 var customStore = new DevExpress.data.CustomStore({
        load: function (loadOptions) {
            debugger;
            var d = $.Deferred();
            var sort = "";
            var desc = false;
            if (loadOptions.sort) {
                desc = loadOptions.sort[0].desc;
                sort = loadOptions.sort[0].selector;
            }
            var oFilter = {
                pageIndex: (loadOptions.skip / loadOptions.take) + 1 ,
                pageSize: loadOptions.take,
                keyWord: $scope.textSearch,
                sort: sort,
                desc: desc
            };
            location.hash = $.param(oFilter);
            manageAccountService.indexAccountAPI.getAllAccounts(oFilter).then(function (result) {
                var data = result.data;
                $scope.index = data.IndexCount;
//--------------------=======-----------------------//
//-------when run this comand data grid was not reload, or binding
                d.resolve(data.Records, { totalCount: data.RecordTotal });

            }, function (error) {
                d.resolve([], { totalCount: 0 });
              });

            return d.promise();
        },
        onLoaded: function (options) {
            $scope.showAfterLoad = true;
            $scope.showLoadPanel = false;
        }
    });
 $scope.grdOptions = {
        width: "auto",
        paging: { pageSize: 15 },
        showBorders: true,
        showRowLines: true,
        hoverStateEnabled: true,
        noDataText: commonTextTranslate.commonNoData,
        onInitialized: function (e) {
            dataGrid = e.component;
        },
        loadPanel: {
            enabled: true,
            showPane: true,
            showIndicator: true,
            width: 200, height: 100,
            text: commonTextTranslate.commonLoadPage
        },
        pager: {
            showPageSizeSelector: true,
            allowedPageSizes: [15, 30, 50],
            showInfo: true,
            infoText: commonTextTranslate.commonPageText + ' #{0}. ' + commonTextTranslate.commonTotalText + ': {1} ({2} ' + commonTextTranslate.commonItemText + ')'
        },
        bindingOptions: {
            'pager.visible': 'ShowPage',
        },
        dataSource: { store: customStore },
        columns: [
            { caption: textTranslates.No, width: 50, alignment: 'center', cellTemplate: function (cell, options) { return $(cell).text(options.rowIndex + $scope.index + 1); } },
            {
                dataField: 'AccountName', sortOrder: "asc",
                caption: textTranslates.AccountName,
            },
            {
                cellTemplate: $("#tmp-person"), caption: textTranslates.lblPerson, dataField: "FullName"
            },
            {
                alignment: 'center', width: '110px', cellTemplate: $("#tmp-actions")
            }
        ],
        filterRow: {
            visible: false,
            showOperationChooser: false
        },
        remoteOperations: {
            grouping: false,
            filtering: false,
            sorting: true,
            paging: true
        }
    };

Event search :

 $scope.onEnterKeySearch = function (e) {      
        $scope.textSearch = $(e.element).find("input").val();
        var dataGrid = $('#grdManagerAccount').dxDataGrid('instance');
        if ($scope.textSearch.trim()) {
            dataGrid.filter([
                ["AccountName", "contains", $scope.textSearch],
                "or",
                ["FullName", "contains", $scope.textSearch],
                "or",
                ["EmailAddress", "contains", $scope.textSearch],
                "or",
                ["Address", "contains", $scope.textSearch],
                "or",
                ["PhoneNumber", "contains", $scope.textSearch],
            ]);
        } else {            
            var store = dataGrid.getDataSource();
            store.reload()
        }
    };

Source: AngularJS