【发布时间】:2016-02-23 08:12:18
【问题描述】:
我正在使用 angularJS 从 WYSIWYG 编辑器将数据保存在 firebase 中。此数据将采用 HTML 格式。
我正在从 firebase 获取 HTML 数据,并且在 angular 指令 ng-bind-html 的帮助下,此 HTML 内容被清理,保存在编辑器中的文本将显示给用户。此文本可能包含文本、图像、链接。
<div ng-bind-html="newHTML" ng-model="cleanText1"></div>
带有链接的数据的 HTML 格式如下:
<p>This is text editor <a href=\"http://someLink\">link</a><br></p>
现在,如果我单击页面上的此链接,它将重定向到指定的 URL。但我希望此链接在页面右侧的 div 中打开页面。 为了防止这种行为,我使用以下代码将 href 替换为 ng-href:
$scope.newHtml=$scope.htmlcontent1.replace("href","ng-href");
$scope.newHTML=$sce.trustAsHTML($scope.newHtml);
这样做 ng-bind-html 删除了 ng-href
<p>This is text editor <a>link</a><br></p> 这使它无法点击。
我还尝试为标签添加指令,这样一旦用户单击此链接,我就可以提供自己的功能,而不是重定向用户。
指令如下所示:
app.directive('a', function ($compile) {
return {
restrict: 'AE',
link: function (scope, elem, attrs) {
var href = elem.children('a').attr('href');
console.log("href"+href);
elem.children('a').attr('href', null);
elem.children('a').attr('ng-click', 'open()');
$compile(elem.contents())(scope);
console.log("elem"+elem.children('a').attr('href'));
scope.open = function () {
alert('1');
}
}
}
})
但是一旦用户单击并被重定向到新页面,就会调用指令。 任何想法如何使此链接在页面右侧打开? 感谢您的帮助。
【问题讨论】:
-
如果将 Firebase 中的 HTML 替换为相同的硬编码 HTML,是否仍然存在相同的问题?如果是这样,您可以从等式中删除 Firebase 和 AngularFire。
-
@FrankvanPuffelen 感谢您的帮助,但恐怕我需要更多,我将 firebase 中的 HTML 替换为 somelink">Link</a> 但是 ng-bind-html 而呈现此 HTML 会将其转换为 Link 。ng-bind-html 正在过滤掉 angular 指令并仅保留 HTML。有没有办法阻止 ng-bind-html 过滤 angular 指令?
标签: angularjs firebase angularfire