首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >告诉角不要解析某些HTML块

告诉角不要解析某些HTML块
EN

Stack Overflow用户
提问于 2017-03-27 12:56:53
回答 1查看 375关注 0票数 2

对于上下文,我正在为我的角(1.5.8)应用程序构建语法高亮显示。对于语法突出显示,我使用Prism.js,不幸的是,当我在HTML中使用ng-include时,它不能突出显示我的代码。很容易理解,因为它引入了异步性。因此,为了克服这个问题,我创建了一个角指令,这样我就可以编写如下内容:

代码语言:javascript
复制
<prism lang="html">
  <md-toolbar layout layout-align="end center"></md-toolbar>
</prism>

然后,在我的指令中,到目前为止,我正在通过Prism.highlight(transclusion, Prism.languages[this.lang])运行该指令的内容。它工作,但唯一的问题是,角解析我的结论,并修改我的输入html,它添加了额外的类,因为我使用的layoutlayout-align指令。

这是我的问题所在。我能告诉角“不要解析这段代码”吗?

编辑:我试图用<pre></pre>包装输入,但这没有帮助。角仍然解析它并增加了类。

Edit2:在我写这篇文章的时候,我有一个想法,把html元素放在角度上下文之外,给它们提供唯一的id。然后编写<prism code-id="some-unique-id">,然后该指令可以获取该uid引用的dom elem,并将其包含在dom中。嗯,丑陋的家伙,但我可以工作,对吗?

Edit3:我正在用更多的代码扩展这个帖子,这样你就可以得到完整的图片

1:在styleguide.html中

代码语言:javascript
复制
<!-- MATERIAL DESIGN -->
<div id="material">
  <h1>Material design assets</h1>
  <div ng-include="'./material.html'"></div>
</div>

2:在material.html中

代码语言:javascript
复制
<section>
  <h2>Dialog</h2>
  <md-button class="md-accent">Open sample dialog</md-button>

  <prism lang="html">
    <md-toolbar class="md-primary">
      <header class="md-toolbar-tools">
        <h3 class="md-headline">{{ 'Dialog title' | translate }}</h3>
        <!-- SPACER -->
        <span flex></span>
        <md-button class="md-icon-button" ng-click="ctrl.close()"><i class="material-icons">close</i></md-button>
      </header>
    </md-toolbar>
    <md-dialog-content>
      <div class="md-dialog-content">
        <!-- Content here -->
      </div>
    </md-dialog-content>
    <md-dialog-actions layout-padding layout layout-align="end center">
      <!-- stuff here -->
    </md-dialog-actions>
  </prism>
</section>

3:在构成部分

代码语言:javascript
复制
class PrismHighlighter {
    static get $descriptor() {
        return {
            controller: PrismHighlighter,
            template: `
                <pre>
                    <code class="language-{{$ctrl.lang}}">
                        <ng-transclude class="transclusion"></ng-transclude>
                    </code>
                </pre>
            `,
            transclude: true,
            bindings: {
                lang: '@'
            }
        }
    }

    static get $inject() {
        return ['$element'];
    }

    constructor($element) {
        this.element = $element;
    }

    $postLink() {
        const codeElem = this.element.find('code');
        const transclusion = $(this.element).find('ng-transclude').html();
        const hCode = Prism.highlight(transclusion, Prism.languages[this.lang]);
        codeElem.html(hCode);
    }
}
module.component('prism', PrismHighlighter.$descriptor);

4:和输出

现在你可以清楚地看到,有很多角相加的东西是我不想要的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-27 13:13:32

在它周围使用ng-non-bindable指令。

对于角1.x,只需使用:

代码语言:javascript
复制
<div ng-non-bindable>
</div>

对于角2.x,检查这个帖子,它展示了如何做同样的事情。

参考资料:

https://docs.angularjs.org/api/ng/directive/ngNonBindable

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43047131

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档