我使用ngJsonExportExcel依赖项将JSON导出到EXCEL。
我有另一个PHP文件,它根据按下的按钮从sql获取数据,并且我要导出该数据。
由于按钮的属性,将发生导出。
我想发生的是,当我按下按钮时,它首先加载数据,然后导出。
这是安格拉家族:

$scope.Export_to_csv = function (odid,hour) {
        $http.get("fetch-sms-list.php?odid="+odid+"&hour="+hour)
           .success(function (data) {
               $scope.smslist=data.result;
            });
    }

这是按钮(在桌子上):
<tr ng-repeat="row in records | orderBy: sortType : sortReverse">
                    <td>{{ $index +1 }}</td>
                    <td>{{row.pname + " " + row.sname}}</td>
                    <td>{{row.areaname}}</td>
                    <td>{{row.oddate}}</td>
                    <td>{{row.odtime}}</td>
                    <td><button ng-click="Export_to_csv(row.ODid,row.odtime)" ng-json-export-excel data="smslist" report-fields="{'fname': 'Heder 1', 'sname': 'Header 2'}"
                                filename =" 'export-excel' " separator=","
                                class='btn btn-info'>
                            <i class="fa fa-file-excel-o" aria-hidden="true"></i></button></td>
                </tr>

但正如我所想的-首先是出口。
有办法解决吗?我宁愿避免多个按钮,即使它们隐藏起来。

最佳答案

如果打开插件的源代码:
https://github.com/dtagdev1/json-export-excel/blob/master/src/json-export-excel.js
您将看到它只充当指令/属性。没有服务,没有外线电话。
所以你有几种方法:
1)更改代码,以便动态添加指令,并在解析http请求后编译它,将其从HTML中删除:

// note the add of $event
$scope.Export_to_csv = function ($event, odid,hour) {
        alert("fetch-sms-list.php?odid="+odid+"&hour="+hour);
        $http.get("fetch-sms-list.php?odid="+odid+"&hour="+hour)
           .success(function (data) {
               $scope.smslist=data.result;
               $event.currentTarget.attr('ng-json-export-excel', '');
               $compile($event.currentTarget.contents())($scope); // inject $compile
               // inject $timeout to be sure it's called after the compile
               $timeout(function () {
                  $event.currentTarget.triggerHandler('click');
               });
            });
    }

2)创建自己的指令来包装这个指令,为HTTP请求的细节添加一个属性,并在其中执行HTTP请求,然后触发导出
3)我的建议是:创建一个服务来实现这一点。如果打开指令的源代码,就可以得到所需的一切。您还可以为该插件创建一个PR,以便在不使用HTML的情况下使用同样的服务来改进它。
您将允许未来的用户轻松解决相同的问题。

10-05 21:01
查看更多