Django与AngularJS:如何显示来自Django调试错误消息的Angular $http错误
我有一个Django的视图,它是通过Angular的$http.post来调用的。
//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错误页面(就是一个完整的HTML页面)。
我该如何在Angular中显示这个错误页面(完整的HTML页面)呢?(这里有一些关于模态框的讨论:AngularJS,显示弹出框 - 最优雅的方式?,但没有关于完整HTML页面的内容…)
我想我可以用一个框架元素和DOM来实现这个:
$window.frames['myErrorFrame'].document.innerHTML = $scope.displayError;
但这样看起来不太像Angular的做法……这几乎可以做到,但我仍然面临直接写入DOM的问题,因为src是一个字符串:在AngularJS中动态插入iframe到页面
有没有更好的方法在Angular中显示一个完整的HTML页面字符串呢?
1 个回答
0
这里有一个可能的解决方案。它能工作,但工作效果有高有低,这个方法有点像是变通的做法——算是最低级别的工作方式。
错误函数(来自 用Javascript或jQuery向子iframe写入元素):
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"}
注意错误信息标志的切换,我似乎必须这样做,因为update_error在控制器之外(这应该有个简单的解决办法,但我还有其他事情要处理)。这个方法能用,但我想这并不是最标准的做法。可能还有更好的方法可以用到 $sce(这个我稍后再研究)。