Angular 2 可以解析从外部 CMS 收到的链接并将其解析为内部链接吗

2024-01-04

我们正在开发一个解耦项目,以 Drupal 作为后端,Angular 作为前端。一切都已接近完成,但某些(动态的,如在 Drupal 中创建的)页面需要链接到角度应用程序的不同页面。

例如:

  1. 编辑在 Drupal 中创建常见问题解答并附上答案 包含指向 Angular 应用程序的定价页面的链接。 (问:这项服务的费用是多少?答:查看我们的[定价]页面)
  2. 前端用户打开常见问题解答页面
  3. Angular 通过 REST 从 Drupal 加载我们的常见问题解答页面 (html)
  4. 用户点击步骤 1 中提到的链接

会发生什么:

整个页面被重新加载,丢失当前正在进行的任何进程(即播放器中播放的内容),并让用户再次查看我们的加载屏幕。

我们希望发生什么:

我们希望触发路由器访问内部 URL,这样我们就不会失去 SPA 的感觉。 我们尝试使用动态组件来复制这一点,但由于我们事先不知道内容是什么样的,因此很难实现这一点。

有没有官方的方法(或者可能的解决方法)来解决这个问题?我们想象我们可以通过解析从 CMS 获得的任何链接,或者在 CKeditor 中进行自定义格式来解析来实现此目的。但是一旦我们到达角度一侧,我们不知道应该如何插入 HTML 以及现在在内部工作的链接。


自从您发布以来已经有一段时间了,但我自己没有找到解决方案,因此想创建它作为未来的参考。

我们通过在 html 上使用的指令解决了这个问题,如下所示:

<div [innerHTML]='contentFromCMS' appRouteDirective></div>

该指令捕获所有点击并检查目标是否是带有 href 元素的标签。如果 href 是相对的,则使用路由器。如果它包含主机名(设置您自己的),它将获取路径并使用路由器。否则它将在新窗口中打开。

import { Directive, ElementRef, HostListener } from '@angular/core';
import { Router } from '@angular/router';

declare let window: any;
declare let document: any;

@Directive({
  selector: '[appRouteDirective]'
})
export class RouterLinkDirective {
  public hostname = '.hygglo.se'; // The starting dot avoids email links as well

  constructor(private el: ElementRef, private router: Router) {}

  @HostListener('click', ['$event'])
  public onClick(e) {
    const href = e.target.getAttribute('href');
    if (e.target.tagName === 'A' && href) {
      e.preventDefault();
      if (this.isLocalLink(href)) {
        this.router.navigate([this.getPathFromURL(href)]);
      } else {
        window.open(e.target.href);
      }
    }
  }

  public getPathFromURL(url: string) {
    let el = document.createElement('a');
    el.href = url;
    return el.pathname;
  }

  public isLocalLink(uri: string) {
    if (uri && (uri.startsWith('/') || uri.includes(this.hostname))) {
      return true;
    } else {
      return false;
    }
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Angular 2 可以解析从外部 CMS 收到的链接并将其解析为内部链接吗 的相关文章

  • Javascript:如何检查异步操作是否仍在挂起/正在进行中?

    我想知道是否可以以某种方式检查 Javascript 中的异步操作是否仍处于待处理状态 因为我正在执行调用特定 URL 的数据库请求 虽然 db 调用仍在进行中 但我想停止任何其他传入的 db 调用 这意味着 停止对该 URL 的任何进一步
  • 为什么 `obj.foo = function() { };` 没有将名称 `foo` 分配给函数?

    从 ES2015 ES6 开始 函数有了专有名称 包括官方名称 name属性 而函数创建时的赋值除了明显的函数声明和命名函数表达式之外还有多种方式 比如给变量赋值 函数的名字设置为变量的名字 给对象属性赋值 函数的名称设置为属性的名称 甚至
  • 如何从ArrayBuffer中获取二进制字符串?

    JavaScript中如何从ArrayBuffer中获取二进制字符串 我不想对字节进行编码 只需将二进制表示形式获取为字符串 提前致谢 以下代码将一致地转换ArrayBuffer to a String并再次返回 而不会丢失或添加任何额外的
  • 使用 javascript 调用 ViewComponent

    我有一个带有几个视图组件的网页 当我单击这些组件时 我会为其打开一个简单的编辑器 请参见下图 如果我编辑文本并按 Enter 键 我想重新渲染视图组件而不是孔页面 是否可以使用 javascript 调用视图组件来获得此行为 通过更新 您现
  • browserify 错误 /usr/bin/env: 节点: 没有这样的文件或目录

    我通过 apt get install 安装了 node js 和 npm 以及所有依赖项 然后安装了 browserify npm install browserify g 它完成了整个过程 看起来安装正确 但是当我尝试为此做一个简单的捆
  • ExtJS 4:克隆商店

    我正在尝试找出如何克隆Ext data Store不保留旧的参考 让我用一些代码更好地解释一下 这是源商店 var source Ext create Ext data Store fields name age data name foo
  • 通过 HTML5 文件和 URL API 正确创建和提供 PDF Blob

    好吧 假设我有文档数据存储在某处 让我们任意取this pdf http www grida no climate ipcc tar wg1 pdf tar 01 pdf 问题 1 我想要做的是对此 URL 进行 AJAX 调用 因为我需要
  • 区分单击与 mousedown/mouseup

    我已经阅读了有关这种情况的 stackoverflow 上的几个答案 但没有一个解决方案有效 我尝试根据用户是否单击某个元素或使用 jQuery 将鼠标按住该元素来执行不同的操作 有可能做到这一点吗 onMouseDown 将在按下左侧或右
  • 带有嵌入式 Ruby 的 Javascript:如何安全地将 ruby​​ 值分配给 javascript 变量

    我在页面的 javascript 块中有这一行 res foo 处理这种情况的最佳方法是什么 ruby var里面有单引号吗 否则会破坏 JavaScript 代码 我想我会用红宝石JSON http json org ruby var 上
  • NodeJS 无法加载 css 文件

    所以我正在尝试制作一个 NodeJS 服务器 并且我尝试保留尽可能少的附加组件 但是 我遇到了一个问题 我似乎无法加载任何内容CSS我调用的文件HTML文件 该调用似乎确实由服务器处理 但它不会显示在浏览器中 My 网络服务器 js fil
  • django ajax post 403被禁止

    使用 django 1 4 当我尝试从我的 javascript 做我的 django 服务器上的帖子时 我收到 403 错误 我的 get 工作正常 尽管问题仅出在帖子上 也尝试过 csrf exempt但没有运气 更新 我现在可以发布我
  • Rxjs 可观察等待直到满足某些条件

    我有以下重试逻辑来重试操作 对于单个请求来说它工作得很好 对于多个正在进行的请求 我想在重试之前等待现有的重试逻辑完成 handleError errors Observable
  • 比较 javascript 元素和 scala 变量的 Play 框架 Twirl 模板

    如下面的代码示例所示 我想比较 scala 辅助元素内的 javascript 元素 然而 即使存在元素 abcde 它也始终返回 false 除了使用标签之外 如何获取 scala 辅助元素内的 javascript 值 appSeq S
  • 在外部单击时关闭弹出 div

    我有一个弹出 div 仅在单击特定按钮时显示 单击同一按钮时它甚至会隐藏 我的问题是 我还想在单击外部任何地方时隐藏 div 我无法这样做 因为弹出 div 位于主包装类内部 并且无法通过在包装类上使用 click 事件并使其隐藏来做到这一
  • CryptoJS 和 Pycrypto 一起工作

    我正在使用 CryptoJS v 2 3 加密 Web 应用程序中的字符串 并且需要在服务器上使用 Python 对其进行解密 因此我使用 PyCrypto 我觉得我错过了一些东西 因为我无法让它工作 这是JS Crypto AES enc
  • 如何为 ng-repeat orderBy 创建回调?

    寻找一种方法让 AngularJS 的 ng repeat orderBy 过滤器在完成渲染后执行回调 Markup div table thead tr th Name th th Age th tr thead tbody tr tr
  • 单击react.js 切换列表的背景颜色

    我正在尝试创建一个具有以下功能的列表 悬停时更改列表项的背景颜色 单击时更改列表项的背景颜色 在单击的元素之间切换背景颜色 即列表中只有一个元素可以具有 clicked 属性 我已经执行了 onhover 1 和 2 功能 但无法实现第三个
  • 在 中动态添加链接样式表 [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 如何将链接
  • 使用 dnode 从服务器向客户端发送消息

    几个月前 我发现了 nowjs 和 dnode 并最终使用了 nowjs 并且https github com Flotype nowclient https github com Flotype nowclient 用于客户端 服务器双向
  • 我可以防止将 Leaflet 地图平移到世界边缘之外吗?

    有没有办法限制平移到世界边缘之外 在这幅画中 棕色是世界 灰色是虚空 我想让它不可能像这样平移 Leaflet 允许您控制地图抵抗被拖出边界的程度maxBoundsViscosity选项 值 0 到 1 将其设置为最大值会完全禁用拖动出界

随机推荐

  • 使用代理拦截 C# 中的方法调用

    我想做的是能够拦截对对象方法和属性的调用 以实现横切关注点 我正在使用基于代理的 AOPContextBoundObject 然而 这不适用于递归方法调用 针对目标的第一次调用将被代理拦截并成功调用 允许我在这里进行横切 但是 第一个方法中
  • 无法在嵌入式 ASPX 代码中引用动态对象

    我正在 Page Init 事件期间创建一个 List 成员变量 我在从 aspx 页面中嵌入的 C 代码引用列表中的对象时遇到问题 该错误是运行时绑定程序异常 显示 object 不包含 JobID 的定义 当调用调试器时 我可以看到 f
  • 联合两个选择基于某些列(而不是整行)删除重复项

    我想合并 2 个 select 语句 结果将在记录方面不同 但是我想在第二个 select 语句中省略重复的结果 考虑某些列 select id name type parent from table1 where type 1 union
  • 在闪亮的应用程序上,ggplotly()渲染的大小是plot_ly()的一半。如何解决这个问题?

    当使用 ggplotly 与plot ly 在闪亮的应用程序中生成绘图时 绘图的宽度小于一半 这是为什么 有没有办法修复它 以便 ggplotly 生成与plot ly 或 ggplot2 宽度相同的图 我尝试过使用宽度参数 但这并不能解决
  • 在控制台 .NET Core 应用程序中创建用户

    我有一个 ASP NET Core 1 0 解决方案 包含 3 个项目 Web 控制台应用程序 DataAccessLayer 我使用 ASP NET Core Identity 和 Entity Framework Core SQL Se
  • 使用 iisnode 时保护 CookieSession

    我将节点与 IIS 一起使用iisnode https github com tjanczuk iisnode我在设置 CookieSession 选项时遇到问题secure true 我在 IIS 上使用 HTTPS 并将任何 HTTP
  • 如何更改 MathJax 的字体

    我无法让 MathJax 更改它用来渲染用 AsciiMath 编写的公式的字体 我已经在 StackOverflow 和网络上的其他地方阅读了类似问题的答案 MathJax 样式 https stackoverflow com quest
  • 处理 blob 游戏中的图像

    我设法将图片存储在 Google App 引擎 Blob 中 我可以从仪表板的 Blob 查看器中看到它 也可以使用服务处理程序在我的应用程序中看到它 然而 现在我有了这张图片 我想在将其提供给客户时调整它的大小 问题是我不能这样做 我不能
  • 如何使用 Swift 3 进行 Firebase 数据库查询来获取一些孩子?

    如何在 Firebase 数据库中进行查询以获取控制台中的一些子项 例如 从下面的快照中 我如何进行查询以获取Images where Des 11 我正在使用这段代码 func loadData Ref FIRDatabase datab
  • 可配置的计时器触发器 - Azure Web 作业

    我正在构建一项以固定间隔 例如 1 分钟 触发的工作 我已成功使用触发的网络作业 并在函数中硬编码了时间跨度 public void foo TimerTrigger 00 01 00 TimerInfo timer 现在 如果我想将触发时
  • R:write.table的格式输出

    是否可以使用 write table 格式化输出 我可以使用制表符左对齐列 sep t 并且可以使用两个选项卡增加列之间的间距 sep t t 理想情况下 我希望能够右对齐列并使用比提供的中间间距 通过 t 和 t t 使用类似的东西sep
  • 在侦听器中使用 ParserRuleContext 遍历令牌 - ANTLR4

    在使用侦听器迭代令牌时 我想知道如何使用 ParserRuleContext 来查看令牌流中的下一个令牌或接下来的几个令牌 在下面的代码中 我试图查看当前标记之后直到 EOF 的所有标记 Override public void enter
  • Python 3:对象如何成为类型的实例?

    在Python 3中 object是一个实例type and type也是一个实例object 每个类怎么可能派生自另一个类 有实施细节吗 我用这个检查了isinstance sub base 根据 Python 文档 它检查子类是否派生自
  • 如何从 jQuery 选择中排除这些元素?

    我的 jQuery ul dropdown ul slideDown slow ul dropdown ul ul children hide 这会导致与第二个选择器匹配的内容短暂显示 如何从第一组中排除第二组 只显示第一组 My HTML
  • Linq 存储过程超时但 SSMS 快速

    我有一个使用 LinqToSQL 调用的存储过程 我根本没有做任何特别的事情 例如 MyDataContext db new MyDataContext var results db storedProcedure param1 param
  • 如何将 Visual Studio 2010 Express C# 连接到 SQL Server Express

    除了允许的轻量级选项 Access SQL Compact 或 SQL 文件 之外 是否有任何真正的解决方法可以将 C Express 版本连接到数据库选项 正如其他地方所指出的 在网络版中可以这样做 还值得注意的是 您可以创建一个项目文件
  • 如何在 Typeorm/Typescript 中添加请求超时?

    今天 Typeorm Postgres 的行为 getManager query and getRepositoty createQueryBuilder getMany 就是无限期地等待响应 有没有办法引入我可能错过的请求超时 如果这是不
  • ANTLR4:空白处理

    我见过许多使用空格处理的 ANTLR 语法 如下所示 WS n t r gt skip or WS n t r gt channel HIDDEN 因此空格被丢弃并分别发送到隐藏通道 使用这样的语法 grammar Not start ex
  • Angularjs 控制器析构函数

    我有一个 AngularJs 应用程序 我将控制器用于某些子范围 在每个控制器中 我可以设置许多属于相应子范围的变量 当 AngularJs 实例化控制器时 有一个构造函数 我可以在其中为子作用域变量设置默认值 我有控制器 析构函数 吗 我
  • Angular 2 可以解析从外部 CMS 收到的链接并将其解析为内部链接吗

    我们正在开发一个解耦项目 以 Drupal 作为后端 Angular 作为前端 一切都已接近完成 但某些 动态的 如在 Drupal 中创建的 页面需要链接到角度应用程序的不同页面 例如 编辑在 Drupal 中创建常见问题解答并附上答案