4

此错误与 AngularJS 的ngTable插件有关。

我似乎遇到了一个非常奇怪的错误。基本上,我可以$scope.tableParams.reload()毫无问题地运行两次,但是在第三次执行以及接下来的每一次执行中,我都会收到以下错误:

TypeError: Cannot set property '$data' of null at [removed]/ng-table.js:411:55

我相信这是所有相关代码,但如果缺少任何内容,请告诉我:

$scope.lookupAddress = function(address){       
    var url = 'https://blockchain.info/multiaddr?cors=true&active='+address;
    $scope.loading = true;
    $scope.clearTableData();
    $http.get(url).success(function(data){
        $scope.loading = false;
        $scope.loaded = true;
        $scope.loadError = false;
        glob = data;

        //I believe the next few for loops, and the assignment of transactions, is not relevant to finding the code.  That being said, I've included it because bugs hide where you least expect it.
        for (i = data.txs.length -1; i > -1; i-- ){
            var inputAddr = []; 
            for (z = 0; z < data.txs[i]['inputs'].length; z++){
                inputAddr.push(data.txs[i]['inputs'][z]['prev_out']['addr'])
            }
            var outputAddr = [];
            for (z = 0; z < data.txs[i]['out'].length; z++){
                outputAddr.push(data.txs[i]['out'][z]['addr'])
            }
            transactions[i] = {
                'Hash' : data.txs[i]['hash'],
                'Amount' : data.txs[i]['result'] / 100000000,
                'Balance' : data.txs[i]['balance'] / 100000000,
                'InputAddress' : inputAddr,
                'OutputAddress' : outputAddr,
                'Date' : timeConverter(data.txs[i]['time'])
            };
        };

        //You can also ignore this too... probably.
        $scope.output = {
            'BTC' : data.wallet.final_balance / 100000000, //Response in satoshi, so have to divide.
            'Address' : address,
            'Total Received': data.addresses[0].total_received / 100000000,
            'Total Sent': data.addresses[0].total_sent / 100000000,
            'Transactions' : transactions
        };
        //Enables new data to be loaded, e.g. on a new address.
        if ($scope.tableParams){
            $scope.tableParams.reload();
        } 
        data = transactions;
        $scope.tableParams = new ngTableParams({
            page: 1,            
            count: 5,           // items per page
            sorting: {
                Date: 'desc' 
            }
        }, {
            total: transactions.length, 
            getData: function($defer, params) {
                data = transactions;
                var orderedData = params.sorting() ? $filter('orderBy')(data, params.orderBy()) : data;
                $defer.resolve(orderedData.slice((params.page() - 1) * params.count(), params.page() * params.count()));

            }
        });
    }).
    error(function(data){
        $scope.loadError = true;
    });
}

$scope.clearTableData = function(){
    transactions = [];
    $scope.output = {}
    if ($scope.tableParams){
            $scope.tableParams.reload();
    } 
}
4

4 回答 4

6

我知道这为时已晚,但我认为最好为其他寻求同一问题答案的人发表评论。

我也遇到了同样的问题,并按照以下 URL 中的示例进行了修复。

https://github.com/esvit/ng-table/blob/master/src/scripts/04-controller.js

在“ngTableParams”实例创建之后,我刚刚将以下代码行添加到我的代码中。

$scope.params.settings().$scope = $scope;
于 2014-09-06T06:13:22.377 回答
0

尝试添加:

,
$scope: { $data: {} }

后:

getData: function($defer, params) {
                data = transactions;
                var orderedData = params.sorting() ? $filter('orderBy')(data, params.orderBy()) : data;
                $defer.resolve(orderedData.slice((params.page() - 1) * params.count(), params.page() * params.count()));

            }
于 2014-05-11T13:36:13.597 回答
0

我有同样的问题。初始化时,即使不使用分页,ngTableParams也需要指定所有参数:pagecounttotal和,否则在将所有设置合并在一起时,设置的属性将被设置为 null 。counts$scope

于 2014-10-03T06:27:18.027 回答
0

我也遇到了同样的问题并通过添加重新加载来解决它:

$scope.tableParams as below 
$scope.tableParams = new ngTableParams({
            page: 1,
            count: 25,
            ***reload: $scope.tableParams***
        },
于 2015-12-29T16:21:04.180 回答