角度赋值变量到$ scope失败

时间:2014-03-30 06:43:43

标签: javascript node.js angularjs express

在控制器中,我可以从节点服务器获得响应消息。但是分配失败。 控制器:

.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,当我再次点击时,它可以获得。

2 个答案:

答案 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();