在控制器中,我可以从节点服务器获得响应消息。但是分配失败。 控制器:
.controller('someCtrl', function(exportExcel){
$scope.clickEvent = function(){
exportExcel.postData( function(msg){
console.log(msg.downloadURL) //output download file's path.Get from nodejs response.
$scope.downloadlink = msg.downloadURL;
angular.element('download').click(); //dowload automatically,but do not work.
})
}
});
视图:
<a ng-click="clickEvent()">Export Excel</a>
<a ng-href="{{downloadlink}}" target="_blank" id="download" ng-hide="true"> Download </a>
ng-href
无法获取$scope.downloadlink
,当我再次点击时,它可以获得。
答案 0 :(得分:0)
当您更新控制器的范围时,视图尚未更新在下一个周期中使用。
您可以通过包装$ timeout内部来解决此问题,而angular.element不支持选择器,您可以尝试document.getElementById
或在页面中包含jQuery并使用jQuery选择器:
$timeout(function(){
document.getElementById('download').click();
//$("#download").click();
});
请记住将其注入控制器:
.controller('someCtrl', function(exportExcel,$timeout){
我建议通过在页面上添加隐藏的iframe来下载该文件的另一种解决方案:
<iframe id="download" style="display:none"></iframe>
并将其src
设置为:
document.getElementById('download').src = msg.downloadURL;
//$("#download").attr("src",msg.downloadURL);
答案 1 :(得分:0)
非常确定您的选择器是错误的:
angular.element('download').click();
应该是
angular.element('#download').click();