JavaScript   发布时间:2022-04-16  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了javascript – 使用AngularJS和Highlight.js进行动态语法突出显示大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在构建一个说明常见应用漏洞(如SQL注入)的站点.我使用AngularJS和highlight.js来创建交互式的例子.

如何使AngularJS和highlight.js更新我的代码片段?

This Fiddle演示如果用户的输入未被验证或消毒,在电子邮件字段中如何输入“Or 1 = 1”可能会更改查询的预期行为.

SELECT * FROM dbo.Users WHERE Email='{{email}}' AND password='{{passworD}}'

当用户输入电子邮件地址和密码时,Angular会更新查询.但是,语法突出显示不会更新.

SELECT * FROM dbo.Users WHERE Email='user@domain.com' AND password=''

我尝试重新初始化hljs,但是当我做角停止更新查询.

hljs.initHighlighTing.called = false;
hljs.initHighlighTing();

应用

<script>
    var app = angular.module("app",['hljs']);
    app.controller("controller",function($scopE) {
        $scope.email = "user@domain.com";
        $scope.password = "";
    })
</script>
<div ng-app="app" ng-controller="controller">
    <div>
        <div class="row">
            <div class="col-sm-4">Email
                <input type="text" class="form-control" ng-model="email">
            </div>
            <div class="col-sm-4">password
                <input type="text" class="form-control" ng-model="password">
            </div>
        </div>
        <br>
        <div hljs include="'compile-me'" compile="true" language="sql"></div>
    </div>
    <script type="text/ng-template" id="compile-me">
        SELECT * FROM dbo.Users WHERE Email = '{{email}}'
        AND password = '{{passworD}}'
    </script>
</div>

解决方法

在jsfiddle你提供你使用 angular-highlightjs这在你的情况基本上:

>获取您提供的模板,include指令适用
>在生成HTML标记的模板上调用highlightjs库API,其中突出显示的元素具有特定语言的正确样式
>然后将突出显示的HTML标记传递给angularjs $compile

之后不会发生高光,尤其是当内插的内容发生变化时.

解决它的一个方法是使用来自angular-highlightjs的源指令,这是被观察到的,但我认为构建自定义指令更简单.

这里的诀窍是手动内插和突出显示内容.我已经更新了您的fiddle与一个简单的高亮指令,提出了想法:

app.directive('highlight',function($interpolate,$window){
    return {
    reStrict: 'EA',scope: true,compile: function (tElem,tAttrs) {
      var interpolateFn = $interpolate(tElem.html(),truE);
      tElem.html(''); // stop automatic intepolation

      return function(scope,elem,attrs){
        scope.$watch(interpolateFn,function (value) {
          elem.html(hljs.highlight('sql',value).value);
        });
      }
    }
  };
});

大佬总结

以上是大佬教程为你收集整理的javascript – 使用AngularJS和Highlight.js进行动态语法突出显示全部内容,希望文章能够帮你解决javascript – 使用AngularJS和Highlight.js进行动态语法突出显示所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。