2014-01-30 101 views
0

我是相對較新的angularjs。我試圖編寫一個過濾器來獲取文本塊,並在html標記中包含某些單詞,即鏈接標記。想要這樣做的最終原因是基於用戶輸入(例如,可以通過輸入表單字段輸入搜索詞或「鍵」)來對某些單詞啓用ui-bootstrap工具提示。Angularjs過濾器刪除自定義屬性,如「工具提示」

這是我的過濾器(基於角UI「亮點」:https://github.com/angular-ui/ui-utils/blob/master/modules/highlight/highlight.js) -

.filter('annotate', function ($sce) { 
    return function (text, search) { 
     text = text.toString(); 
     search = search.toString(); 
     return text.replace(new RegExp(search,'gi'), '<a href="#" class="mycoolstyle" tooltip-placement="top" tooltip="test">$&</a>'); 
    }; 

它的工作原理,在輸出,只要將href和類露面。然而,「tooltip-placement」和「tooltip」屬性被濾除。我會認爲這是一個HTML過濾問題,除了它讓href和類通過。

輸出的HTML看起來像:

<p ng-bind-html="contentStr | annotate:key" class="ng-binding">Hello World check out my <a href="#" class="mycoolstyle">foo</a> bar app</p> 

的jsfiddle:http://jsfiddle.net/petersg5/76WZf/

另外請注意,我使用1.2.1所以沒有NG綁定,HTML不安全的(因此$ SCE)。

任何想法?我有點難過。

另外,也許我正在談論這一切都是錯誤的?

+0

你安裝UI的自舉? [鏈接](http://angular-ui.github.io/bootstrap/) – R3tep

+0

@ R3tep - 不,但會導致過濾器忽略自定義屬性?我的問題具體是關於只是將任意'屬性'到鏈接元素中。 – PeterG

回答

2

你忘了打電話給$ sce.trustAsHtml。

return $sce.trustAsHtml(text.replace(new RegExp(search,'gi'), '<a href="#" class="mycoolstyle" tooltip-placement="top" tooltip="test">$&</a>')); 

這麼說,我無法得到更換工作,但我創建了一個概念證明:

http://jsfiddle.net/7H7A8/

+0

工作。我把trustAsHtml()放在錯誤的地方。謝謝! – PeterG