我使用Moodle WebService开发了一个AngularJS Moodle webapp,我正在试图展示Moodle eLearning的测验。
我可以使用$http.
获取每个问题。现在的问题是,当我得到问题时,每个问题都带有这样的HTML代码:
我正在使用此控件来获取响应(url5)
app.controller('quizCtrl', function($rootScope, $scope, $http) {
url4 = concatUrl + 'mod_quiz_start_attempt' + '&quizid=2';
$http.get(url4).then(function (response) {
//console.log(response.data);
})
url5 = concatUrl + 'mod_quiz_get_attempt_data' + '&attemptid=7&page=0';
$http.get(url5).then(function (response) {
console.log(response.data);
$scope.questions = response.data.questions;
})
})
当我使用以下代码在HTML中显示问题时,我将HTML代码作为字符串并尝试使用ng-bind-html
,但我收到了错误。
<div role="main" id="main" class="ui-content scroll" ng-app="mainApp">
<div data-role="content" class="pane" id="">
<div class="page-wrap scroll" ng-controller="quizCtrl">
<div ng-repeat="question in questions | orderBy : 'question.number'" id="{{question.number}}">
<div>
<!--{{question.html}}<br /><br />-->
<p ng-bind-html="question.html"> </p><br /><br />
</div>
</div>
</div>
</div>
另外,我尝试过:
JSON.stringify
angular.fromJson(json);
当我使用这行{{question.html}}<br /><br />
时,我得到了这个:
感谢您的帮助!
答案 0 :(得分:1)
您需要使用$sce
服务
$sce.trustAsHtml(varWithHTML)
使绑定html工作。
正如文档所说https://docs.angularjs.org/api/ng/service/ $ sce
答案 1 :(得分:1)
我认为您需要严格上下文转义服务($sce
)。
这是一项服务,使您可以指定它是O.K的上下文。允许任意HTML。
文档:https://docs.angularjs.org/api/ng/service/ $ sce
将其注入控制器:
app.controller('quizCtrl', function($rootScope, $scope, $http, $sce)
...
$http.get(url5).then(function (response) {
console.log(response.data);
$sce.trustAsHtml = $sce.trustAsHtml; // <- needs to be exposed on $scope
$scope.questions = $sce.trustAsHtml(response.data.questions);
})
...
在你看来:
{{questions}}