AngularJS 和解析正文

2023-12-25

我正在尝试使用 AngularJS 创建一个网站,由用户生成的内容驱动,可以使用自定义标签,例如[js-code]...[/js-code]以不同方式显示这些部分内的文本。

API 向我发送一个包含标签的正文文本字符串,以便在客户端上进行解析。

如果我使用本机 JavaScript 或 JQuery,我想我会迭代每个字符,添加到 DOM 元素,当我遇到这些标签之一时,我会创建一个新的 DOM 元素,其格式由标签确定。

然而,在 AngularJS 中,我们不鼓励在 JavaScript 代码中执行 DOM 操作。

我无法想象仅使用 AngularJS 指令来实现我的目标的方法。

另一个复杂之处是文本需要可编辑并具有实时预览。这似乎排除了将字符串分割成部分数组的可能性。 (也许不是;只是看起来太慢了。)

是否可以在 AngularJS 框架内完成我尝试的事情?如果是这样,怎么办?


Plnkr 演示 http://plnkr.co/edit/uGGM8iWLgOfyAH4DB9Cm?p=preview

您可以利用 Angular 的模板引擎来构建自己的实时模板编辑器,并包含自定义代码标签。

HTML

<h3>Text Editor</h3>
<textarea ng-model="model"></textarea>

<h3>Raw Preview</h3>
<div>
  {{ model }}
</div>
<h3>Live Preview</h3>
<js-code-content model="model">
   Loading...
</js-code-content>

定制指令

  app.directive('jsCodeContent', function($compile) {
     return {
       restrict: 'E',
       scope: {
         model: '=model'
       },
       link: function(scope, element, attr) {
            scope.$watch('model', function(value, oldValue) {

                var model = value || '';
                // encode HTML
                model = angular.element('<div></div>').text(model).html();
                model = model.replace(/\[js:bold\]/g, '<js-bold>');
                model = model.replace(/\[\/js:bold\]/g, '</js-bold>');
                model = model.replace(/\[js:italic\]/g, '<js-italic>');
                model = model.replace(/\[\/js:italic\]/g, '</js-italic>');
                model = model.replace(/\[js:code\]/g, '<js-code>');
                model = model.replace(/\[\/js:code\]/g, '</js-code>');
                model = model.replace(/\[js:hilight\]/g, '<js-hilight>');
                model = model.replace(/\[\/js:hilight\]/g, '</js-hilight>');


                  var e = angular.element('<content></content>');
                  e.html(model);
                  element.empty();
                  element.append(e);
                  $compile(e)(scope);


            });

       }
     }
  });

JS 代码模板

  app.directive('jsCode', function() {
     return {
        restrict: 'E',
        transclude: true,
        template: '<code ng-transclude></code>'
     }
  })
  app.directive('jsBold', function() {
     return {
        restrict: 'E',
        transclude: true,
        template: '<b ng-transclude></b>'
     }
  })      
  app.directive('jsItalic', function() {
     return {
        restrict: 'E',
        transclude: true,
        template: '<i ng-transclude></i>'
     }
  })      
  app.directive('jsHilight', function() {
     return {
        restrict: 'E',
        transclude: true,
        template: '<span class="highlight" ng-transclude></span>'
     }
  }) 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AngularJS 和解析正文 的相关文章

随机推荐

  • 为什么标签的高度比其内容大?

    我创建了一个小片段来说明问题 我有一个svg里面的图标 i 标签 这是我的图标的基本块 放置在我的页面的各个位置 为了这个示例 我将其放置在一个简单的 div 容器中 如果您检查下面示例的结果 您会发现 i 标签的高度为33px not 3
  • 在 PHP 中,函数是二进制安全的意味着什么?

    In PHP函数是什么意思binary safe 它们有何特别之处 它们通常用在什么地方 这意味着当您向函数传递任意二进制数据 即包含非 ASCII 字节和 或空字节的字符串 时 该函数将正常工作 例如 非二进制安全函数可能基于需要空终止字
  • 在 MongoDB 中执行 JavaScript 文件

    我想知道如何在 MongoDB 中执行 JavaScript 文件 这是我的 JS 文件中的一段简单代码 function loadNames print name 从命令提示符我尝试像这样执行文件 mongo test js 但它显示错误
  • 如何限制Go中实现的HTTP服务器的连接数?

    我正在尝试在 Golang 中实现 HTTP 服务器 我的问题是 我必须将任何特定时间的最大活动连接数限制为 20 您可以使用netutil LimitListener https godoc org golang org x net ne
  • jQuery 滑块作为时间线

    我刚刚完成了 jQuery 手风琴与 jQuery 滑块的合并 IE 显示 3 张图片 用户可以使用PREV or NEXT按钮可查看下一张 上一张 3 张图像 他们还可以使用滑块浏览所有图像 下一步是使这个滑块看起来像时间线 左侧需要从
  • 我应该使用哪个(对于基于 python 的网站)? sass、compass、switchcss...替代品? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 组织 CSS 的最佳系统是什么 我正在制作几个使用 python 作为后端脚本的网站 我有兴趣使用一些东西来帮助我组织长 css 脚本 我
  • 使用 Jackson 反序列化包装列表

    我有一个像这样的 JSON 对象 geonames countryId 2017370 adminCode1 73 countryId 2027370 adminCode1 71 我怎样才能反序列化这个对象DIRECTLY to List
  • 如何在 Spring 应用程序上下文中将 Class 设置为属性值?

    有没有办法配置 spring 应用程序上下文 以便它将使用 Class 类型的值初始化 setter 我需要初始化该结构 Map
  • 将 RTSP 流转换为虚拟网络摄像头

    我正在尝试使用来自 IP 摄像机的 RTSP 流作为 Windows 上各种应用程序 例如 Skype Zoom Microsoft Teams 等 的视频输入源 到目前为止我找到的唯一解决方案是使用 webcam 7 http www w
  • std::weak_ptr:锁或shared_ptr构造函数?

    似乎有两种方法可以暂时获取 a 所指向的资源的所有权weak ptr Use lock 通过weak ptr to a shared ptr构造函数 这两者都会产生一个shared ptr 锁返回一个nullptr在这种情况下weak pt
  • 动态设置线性布局背景

    我想通过以下方式动态设置线性布局背景 通过 XML 解析从 Web url 获取图像 然后将该图像存储到 SD 卡中 现在图像已保存到 SD 卡中 将该图像设置为应用程序中的线性布局背景 现在我陷入了第三步 有人可以帮忙吗 用这个 Bitm
  • 在Thread中使用EnterCriticalSection更新VCL标签

    我是线程新手 我正在使用一个第三方库 该库使用线程 有时会调用我提供的过程 当线程调用我的过程时 如何更新 TLabel Caption 如果我在其他地方调用了InitializeCriticalSection 它是否像 EnterCrit
  • 光源设置不正确

    我有这段代码 但灯光似乎无法正常工作 当我渲染对象时它很暗 然后当我旋转它时 光源似乎也旋转了 我不知道问题出在哪里 我尝试修改灯光模型但仍然不起作用 这是程序 while glfwWindowShouldClose window Rend
  • Javascript递归设置超时

    我刚刚开始研究 javascript 所以希望这会是简单的事情 我想制作自动播放的图像幻灯片 这非常简单 并且有一些关于它的教程 但由于某种原因我无法让它工作 这就是我所拥有的 var image1 new Image var image2
  • WPF列表框滚动到底部

    我使用 ObservableCollection 作为 listBox 组件的 ItemSource 但控件的行为对我来说并不合适 我已经向下滚动到这件事在我的收藏中第一次出现 但不是最后一次 示例列表为 1 1 2 3 4 5 6 7 8
  • XSLT PI 和样式表参数

    给定一个需要参数的 XSLT 1 x 样式表 是否有任何方法可以将其与指定参数值的 XML 文档关联起来 我阅读了样式表 PI 的 W3C 规范文档 并得到了答案是 否 的印象 但当我读完时 我遇到了急性 BNF 中毒的情况 因此可能错过了
  • 行主与列主矩阵乘法

    我目前正在开发一个 C 程序 尝试计算矩阵乘法 我通过循环第二个矩阵的每一列来完成此任务 如下所示 我已将大小设置为 1000 for i 0 i
  • 如何找出坐标之间的距离?

    我想让它显示两个 CLLocation 坐标之间的距离 有没有办法在没有复杂数学公式的情况下做到这一点 如果没有 你会如何用公式来做呢 CLLocation 有一个 distanceFromLocation 方法 因此给定两个 CLLoca
  • Java HTML->PDF 解决方案?

    我目前正在用 Java 构建一个基于 PDF 的报告 我已经研究过 iText 和 BIRT 但似乎需要付出很大的努力来学习他们的 API 我试图找到一个解决方案 让我可以在 HTMl 中生成报告 我已经知道的东西 并将其输出为 PDF 谁
  • AngularJS 和解析正文

    我正在尝试使用 AngularJS 创建一个网站 由用户生成的内容驱动 可以使用自定义标签 例如 js code js code 以不同方式显示这些部分内的文本 API 向我发送一个包含标签的正文文本字符串 以便在客户端上进行解析 如果我使