gpt4 book ai didi

javascript - AngularJS SPA 中的 Highlight.js 不起作用

转载 作者:行者123 更新时间:2023-11-30 16:19:14 25 4
gpt4 key购买 nike

我有一个将文章加载到 View 中的 AngularJS SPA。有些文章有代码示例,我想用highlight.js突出显示它。

在下面的示例中,我模拟了一个获取请求,因为这就是我在实际应用程序中加载动态内容的方式。 $scope.test与我的实际应用程序可以返回的内容非常相似;要打印的一些常规 HTML,其中包括代码示例。

我的问题:它似乎并没有真正起作用。

具体来说,没有任何内容被突出显示。在我看来,我好像缺少一个 init 或其他东西...... Halp?

我也试过 <div hljs/>结果相同(没有)。没有控制台错误。

This answer提供了在模板中使用 ng-model 的解决方案。但是,我没有在任何地方使用 ng-model。

编辑:我对示例代码进行了一些更改以进一步解释问题。

这是我的应用程序(已简化):

var app = angular.module('app', ['ngSanitize']);

app.controller('ctrl', ['$scope', '$http',
function($scope, $http) {
"use strict";
$http.get('/echo/html').then(function successCallback(response) {
$scope.title = 'Some Title';
$scope.metaStuff = 'Written by Awesome MacFluffykins';
$scope.articleBody = '<p>Here\'s an example of a simple SQL SELECT:</p><pre><code class="sql" highlight>SELECT * FROM table WHERE user = \'1\'</code></pre>';
}, function errorCallback(response) {
console.log("Error: %d %s", response.code, response.message);
});
}
]);

这是我的 HTML:

<div ng-app="app" ng-controller="ctrl">
<h2>{{ title }}</h2>
<p><small>{{ metaStuff }}</small></p>
<div ng-bind-html="articleBody"></div>
</div>

最后是 jsFiddle .

最佳答案

在我看来,最好使用像这样的 DOM 操作指令。通过 ng-model 传递您的源代码(您也可以使用另一个属性)并在指令中运行 HLJS。由于您正在使用异步方法为您的范围提供值,因此您需要使用 $watch 来捕获该值,然后运行 ​​HLJS:

HTML:

<div highlight ng-model="test"></div>

指令:

.directive('highlight', [
function () {
return {
replace: false,
scope: {
'ngModel': '='
},
link: function (scope, element, attributes) {
scope.$watch('ngModel', function (newVal, oldVal) {
if (newVal !== oldVal) {
element.html(scope.ngModel);
var items = element[0].querySelectorAll('code,pre');
angular.forEach(items, function (item) {
hljs.highlightBlock(item);
});
}
});
}
};
}
]);

工作 JSFiddle:https://jsfiddle.net/1qy0j6qk/

关于javascript - AngularJS SPA 中的 Highlight.js 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34993041/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com