2014-07-19 24 views
0

我有一個是從角稱爲以$ http.postDjango和AngularJS:如何顯示來自Django的調試錯誤消息

//LOADFILE =================== 
    this.loadfile = function (clickedItem) { 
     $http.post('/display/' , { "filename": clickedItem.fileName}) 
      .success(function(data) { 
        $scope.fileView.text = data; 
        $scope.fileView.title = clickedItem.title 
      }).error(function(data) {$scope.displayError=data}); 
    }; 

如果Django的拋出一個錯誤Django視圖角度$ HTTP錯誤,數據將是一個完整的Django錯誤頁面(完整的html頁面)。

如何在Angular下顯示錯誤頁面(完整的html頁面)? (這裏的一些模態的討論:AngularJS, show popups - The most elegant way?,但沒有有關完整的HTML網頁...)

我以爲我可以用一個框架元件和DOM做到這一點:

$window.frames['myErrorFrame'].document.innerHTML = $scope.displayError; 

但是,這並不期待非常Angularish ...這幾乎是這樣做的,但我仍然有直接寫入dom的問題,因爲src是一個字符串:insert an iframe into page dynamically in AngularJS

有沒有更好的方法來在Angular中顯示完整的html頁面字符串?

+0

這似乎是相關的:http://stackoverflow.com/questions/9381926/insert-html-into-view-using-angularjs但它不處理完整的HTML頁面(與JS和CSS等);這就是Django發送的內容。 – wgw

+0

類似問題:http://stackoverflow.com/questions/22047701/append-html-content-to-an-iframe-in-angular-js – wgw

+0

也許將它保存在一個templateCache中,然後調用它來填充你的ng-view用它。一旦你把它放在templateCache中,你可以把它放在任何ng-include中,你甚至可以打開一個模式並在其中顯示內容。 –

回答

0

這是一個可能的解決方案。它可以工作,但是有一定程度的工作,這有點冒險 - 工作的零度。

誤差函數(從Write elements into a child iframe using Javascript or jQuery):

update_error = function (message) { 
      var ifrm = document.getElementById('errorIFrame'); 
      ifrm = (ifrm.contentWindow) ? ifrm.contentWindow : (ifrm.contentDocument.document) ? ifrm.contentDocument.document : ifrm.contentDocument; 
      ifrm.document.open(); 
      ifrm.document.write(message); 
      ifrm.document.close(); 
     }; 

和HTML:

<div ng-show="errorMessage != ''"> 
<button class="btn btn-info btn-xs" ng-click="errorMessage=''">Close</button><br /> 
<iframe width="100%" id="errorIFrame"> </iframe> 
</div> 

錯誤回調:

.error(function(data) { 
       update_error(data); 
       $scope.errorMessage="error"} 

注意的errorMessage標誌的切換,其我似乎必須這樣做,因爲update_error在控制器之外(必須有一個簡單的修復f或者說,但我有其他的魚來炒)。這有效,但我想它不是正統的。 $ sce可能有更好的方法(稍後會炒)。