Django与AngularJS:如何显示来自Django调试错误消息的Angular $http错误

0 投票
1 回答
690 浏览
提问于 2025-04-18 13:59

我有一个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(这个我稍后再研究)。

撰写回答