使用AngularJS中的ng click指令替换ng repeat中的静态文本内容

时间:2013-12-23 14:53:22

标签: angularjs angularjs-directive angularjs-ng-repeat

我在这里尝试了很多不同的东西而没有运气。基本上我有一个字符串数组(只是句子)。我需要对这些内容进行ngRepeat并输出它们。没问题。但是我需要能够找到并替换特定的单词组合(在这种情况下为“社会安全”),将其包含在链接中并向该链接添加ngClick指令。

我很确定我需要使用指令,这与编译和链接有关。但多数民众赞成就此而言。任何帮助都将非常感激。

1 个答案:

答案 0 :(得分:0)

我认为你可以使用这样的东西:http://jsfiddle.net/DotDotDot/Z9CHL/2/
我不确定它是最好的实现,但至少它可以工作

HTML代码非常简单,我发送自定义指令一个参数,完整的句子

    <ul ng-repeat='sentence in list'>
        <li><span the-dir txt="sentence"></span></li>
    </ul>

在javascript方面,它很容易但更长:

.directive('theDir', function($compile){
var r=/(social security)/ig;
return { 
    scope:{txt:'='},
    link:function(scope,element,attributes){
        scope.aFunction=function(){
         console.log('In the directive, you clicked on social security');   
        }
        if(r.test(scope.txt)) {
            splitted=scope.txt.split(r);
            console.log(splitted)
            var newSpan=new angular.element('<span>');
            for(var i=0;i<splitted.length;i++)
            {
                if(r.test(splitted[i])){
                    var newLink=new angular.element('<a>');
                    newLink.attr('ng-click','aFunction()');
                    newLink.addClass('social-security');
                    newLink.html(splitted[i]);
                    newSpan.append(newLink);
                }
                 else
                     newSpan.append(splitted[i]);
            }
            element.append(newSpan);
            $compile(newSpan)(scope);
        }
        else
        {
         element.html(scope.txt);   
        }

    }

}
});

我使用正则表达式查找所有出现的句子“社会保障”,将这些出现的句子分开,然后每次用新的angular.element替换单词(在这种情况下,HTML链接,用ng-click属性)。我将所有常规单词和链接附加到原始元素,然后$使用工作链接编译新创建的跨度,以便进行有效的单击。
它似乎工作了 我让你深入研究代码,我希望它可以帮助你

玩得开心