$compile() 的锚点状态导致浏览器完全重新加载而不是 angularjs 中的状态变化

$compile()'d anchor states cause full browser reload not state change in angularjs

如何为已 $compile() 的锚点 link 获取本机 angularjs 状态更改?

更新:2018-06-18 - 仍然遇到这个问题。疯狂地搜索尝试不同的东西,但仍然一无所获; 2018-05-28 - 我仍然遇到这个问题并且没有任何线索。我已经尝试了很多变体,但动态 linking 带有原生 angularjs 状态变化的文本的问题仍然存在。

我有一些不受信任的文本,我通过 links #hashtags 和 @mentiontags 的服务传递这些文本。我使用 $sce.trustAsHtml() 并将 linkified 文本分配回我在视图中使用的 $scope.text 变量。它有效,我可以看到并单击 link,但我得到的不是状态更改,而是完整的浏览器 url 加载。

我已经检查了通过视图正常完成时的状态变化,它有效。

因此,例如:

  1. 我有一些不受信任的文本:Hey, @user, you'll love this!
  2. 我通过 linking 函数传递它并得到这个:Hey, <a ui-sref="user">@user</a>, you'll love this!"
  3. 我 $compile() 获取状态 linked 并在 DOM 中检查时,它看起来像这样:Hey, <a ui-sref="user" href="/user">@user</a>, you'll love this!

但是当我单击 link 时,它不是 angularjs 状态更改,而是完整的浏览器 url 重新加载。

有什么想法吗?

谢谢,

不确定你的问题是什么。我希望,如果您单击 link,您就会离开您的页面。一个技巧可能是使用 target:

在新标签页中打开 link
<a ui-sref="user" href="/user" target="_blank">@user</a>

但是,如果它来自 $compile,这是我使用的有效示例代码:

link: function ($scope, $element, $attrs) {
    $scope.x = "x variable";
    var html = 'your html here like in a template: $scope.x = {{x}}';
    var e = $compile(html)($scope);
    $element.replaceWith(e);
}

希望对您有所帮助!

AngularJS ng-bind-html="html" 没有处理 "html" 中的嵌入式指令(尽管它以某种方式从 ui-sefs...).

基于此question's answer我能够执行嵌入式指令。

解决方案是提供一个 "compile" 指令,它的行为类似于 ng-bind-html,实际上会完全编译和处理指令。链接问题中有更多详细信息。