javascript - Angularjs 指令替换文本

标签 javascript angularjs

我如何在 angularjs 中创建一个指令,例如采用此元素:

<div>Example text http://example.com</div>

并将其转换为此

<div>Example text <a href="http://example.com">http://example.com</a></div>

我已经编写了自动链接函数中的文本并返回 html 的功能(我们将函数称为“autoLink”),但我还没有达到我的指令要求。

我还想向元素添加一个属性,以将对象传递给指令。例如

<div linkprops="link.props" >Example text http://example.com</div>

其中 link.props 是类似 {a: 'bla bla', b: 'waa waa'} 的对象,它将作为第二个参数传递给 autoLink 函数(第一个参数是文本)。

最佳答案

有两种方法:

指令

app.directive('parseUrl', function () {
    var urlPattern = /(http|ftp|https):\/\/[\w-]+(\.[\w-]+)+([\w.,@?^=%&amp;:\/~+#-]*[\w@?^=%&amp;\/~+#-])?/gi;
    return {
        restrict: 'A',
        require: 'ngModel',
        replace: true,
        scope: {
            props: '=parseUrl',
            ngModel: '=ngModel'
        },
        link: function compile(scope, element, attrs, controller) {
            scope.$watch('ngModel', function (value) {
                var html = value.replace(urlPattern, '<a target="' + scope.props.target + '" href="$&">$&</a>') + " | " + scope.props.otherProp;
                element.html(html);
            });
        }
    };
});

HTML:

<p parse-url="props" ng-model="text"></p>

过滤器

app.filter('parseUrlFilter', function () {
    var urlPattern = /(http|ftp|https):\/\/[\w-]+(\.[\w-]+)+([\w.,@?^=%&amp;:\/~+#-]*[\w@?^=%&amp;\/~+#-])?/gi;
    return function (text, target, otherProp) {
        return text.replace(urlPattern, '<a target="' + target + '" href="$&">$&</a>') + " | " + otherProp;
    };
});

HTML:

<p ng-bind-html-unsafe="text | parseUrlFilter:'_blank':'otherProperty'"></p>

注意:'otherProperty' 只是举例,以防您想将更多属性传递到过滤器中。

<强> jsFiddle

更新:改进了替换算法。

关于javascript - Angularjs 指令替换文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14692640/

相关文章:

javascript - 过滤任何属性包含值的对象数组

javascript - 创建一个按钮来控制 JavaScript 创建一些元素。然后,如果这些元素中的任何一个发生变化,请执行某些操作

javascript - 理解 Angular 的 promise

javascript - UI Router Params 值在目标中未定义

angularjs - 工厂方法总是在 AngularJs 中返回 undefined

javascript - 如何在打印之前等待 HTML 文档加载/渲染(纯 JavaScript)

javascript - Firestore - 监听特定字段的变化?

javascript - 将 JavaScript 匿名函数作为参数传递给 WebView

javascript - AngularJs:如果无法从 Controller 访问,则在 ng 中形成表单

javascript - Promise catch 未在测试中被捕获