$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 加载。
我已经检查了通过视图正常完成时的状态变化,它有效。
因此,例如:
- 我有一些不受信任的文本:
Hey, @user, you'll love this!
- 我通过 linking 函数传递它并得到这个:
Hey, <a ui-sref="user">@user</a>, you'll love this!"
- 我 $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,实际上会完全编译和处理指令。链接问题中有更多详细信息。
如何为已 $compile() 的锚点 link 获取本机 angularjs 状态更改?
更新:2018-06-18 - 仍然遇到这个问题。疯狂地搜索尝试不同的东西,但仍然一无所获; 2018-05-28 - 我仍然遇到这个问题并且没有任何线索。我已经尝试了很多变体,但动态 linking 带有原生 angularjs 状态变化的文本的问题仍然存在。
我有一些不受信任的文本,我通过 links #hashtags 和 @mentiontags 的服务传递这些文本。我使用 $sce.trustAsHtml() 并将 linkified 文本分配回我在视图中使用的 $scope.text 变量。它有效,我可以看到并单击 link,但我得到的不是状态更改,而是完整的浏览器 url 加载。
我已经检查了通过视图正常完成时的状态变化,它有效。
因此,例如:
- 我有一些不受信任的文本:
Hey, @user, you'll love this!
- 我通过 linking 函数传递它并得到这个:
Hey, <a ui-sref="user">@user</a>, you'll love this!"
- 我 $compile() 获取状态 linked 并在 DOM 中检查时,它看起来像这样:
Hey, <a ui-sref="user" href="/user">@user</a>, you'll love this!
但是当我单击 link 时,它不是 angularjs 状态更改,而是完整的浏览器 url 重新加载。
有什么想法吗?
谢谢,
不确定你的问题是什么。我希望,如果您单击 link,您就会离开您的页面。一个技巧可能是使用 target
:
<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,实际上会完全编译和处理指令。链接问题中有更多详细信息。