4

このエラーは、AngularJS のngTableプラグインに関するものです。

本当に奇妙なエラーが発生しているようです。基本的に、$scope.tableParams.reload()問題なく 2 回実行できますが、3 回目以降はすべて次のエラーが発生します。

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.tableParams as below 
$scope.tableParams = new ngTableParams({
            page: 1,
            count: 25,
            ***reload: $scope.tableParams***
        },
于 2015-12-29T16:21:04.180 に答える
0

私も同じ問題を抱えていました。を初期化するときは、ページングを使用していない場合でも、ngTableParamsすべてのパラメーターを指定する必要があります。pagecounttotalcounts$scope

于 2014-10-03T06:27:18.027 に答える