anglar 實現模糊搜尋,關鍵字高亮

2022-05-19 15:32:11 字數 1531 閱讀 4324

我們希望搜尋的關鍵字在正文中高亮出來,正文就是過濾器的第乙個引數,第二個引數就是搜尋關鍵字,這樣,我們的過濾器將會有兩個引數了。

高亮的原理很簡單,將需要高亮的內容使用 span 標記隔離出來,再加上乙個特殊的 class 進行描述就可以了。

var fn = function(text, search)

text = encodeuri(text);

search = encodeuri(search);

var regex = new regexp(search, 'gi')

var result = text.replace(regex, '$&');

result = decodeuri(result);

$log.info("result: " + result );

return $sce.trustashtml(result);

};return fn;

});$sce, 和 $log 是 angular 提供的兩個服務,其中 $sce 服務需要使用  ngsanitize 模組。關於這個模組,可以參考:angular-ngsanitize模組-$sanitize服務詳解

我們的頁面可能很複雜,需要在乙個控制器中輸入關鍵字,但是,需要在多個控制器中使用這個關鍵字進行過濾,怎麼處理呢?使用服務可以解決這個問題。

在 angular 中,服務就是乙個單例物件,我們使用 factory 可以直接定義乙個服務物件。

var target = ;

return target;

});在需要使用這個物件的地方,直接注入就可以獲取這個物件了。

在搜尋控制器中,我們希望使用者提供搜尋關鍵字。為了方便檢查,我們順便將使用者的輸入展示出來。

div>

}div>

div>

控制器的實現,我們將服務物件直接注入到控制器中,然後繫結到當前的 $scope 上,以便在當前控制器中實現繫結。

$scope.notify = notifyservice;

});現在,我們可以直接輸入搜尋關鍵字,這個關鍵字將被儲存到服務物件中,可以在當前的 module 中的各個控制器中訪問這個服務物件。

現在,我們已經有了過濾器,也可以直接通過服務物件來獲取搜尋關鍵字,現在組合起來就可以使用了。text 中是我們的正文內容。

div>

div>

下面再看看 highlight 和 notify.search 來自何方。

$scope.text = "hello, world. hello, world. hello, world.";

$scope.notify = notifyservice;

})為了在當前控制器中使用搜尋關鍵字,關鍵是在搜尋關鍵字發生變化的時候,還需要自動更新,我們將服務物件繫結到當前的 $scope 中,這是引用的名稱為 notify.

這樣,在複雜頁面中,我們可能存在多個控制器,在每個需要高亮的控制器中,我們只需要注入服務物件,就可以直接獲取到當前的搜尋關鍵字,配合使用過濾器,就可以直接實現全域性高亮了。

關鍵字搜尋

關鍵字搜尋 function sercah waitmsg 已找到對應的 g keys count 處關鍵字!1 相同關鍵字查詢時返回 reading children reading box m p css span keys removeattr style removeattr id g ke...

elementUI實現關鍵字搜尋 只是搜尋

有過迷茫的階段獨自走在回家的街上,當我發現路還離我很遠現在依然是像當初那麼渴望 elementui實現關鍵字搜尋 運用的elementui選擇器中的遠端搜尋功能 還沒有封裝,接下來會封裝,封裝一點點學,不著急 結構 data 登記門店 prop name class el btn from sele...

ntext搜尋關鍵字

選擇自 zjcxc 的 blog ntext搜尋 按 tb 表中的 keyword 在 ta 中查詢 content 列出每個 keyword 在 content 中的具體位置 鄒建 2004.07 測試資料 create table ta id int identity 1,1 content n...