iT邦幫忙

DAY 5
1

我在前端 ng 時系列 第 5

相見恨晚 - Lo-Dash

Lo-Dash 是我一個相見恨晚超好用的 library。 (大概 3 個月前才知道它~)

Lo-Dash 提供很多我們平常 coding 會用到的工具函式,部分函式的效能甚至比原生 JavaScript 函式還要快。
(ex: jsperf lodash forEach vs native forEach)
假如把程式裡某些原生函式換成 Lo-Dash 操作,會增加網站整體的速度。
總之 Lo-Dash 的函式超好用!

我常用到的 Lo-Dash 函式有以下四種分類:Arrays, Collections, Objects, Utilities

ex.1: Arrays.range()

// 輕輕鬆鬆建立 1911 - 2014 年的 array
​var years = _.range(1911, 2014);

ex.2: Collections.filter()

​// 篩選偶數
var evens = _.filter([1, 2, 3, 4, 5, 6], function(num) { return num % 2 == 0; });

ex.3: Objects.has()

// 找尋是否某個值在某個很長的 objects 裡面
var map = {'TW': '台灣', 'JP': '日本', ... 超多選項};
var isTWInMap = _.has(map, 'TW');

ex.4: Utilities.random()

// 隨機取得一個從 0 到 100 的整字
var num = _.random(0, 100);

官網上可以找到更多很好的例子,整理的很完整。


如何在 AngularJS 架構下引入 Lo-Dash ?

HTML:

 <script src="http://cdnjs.cloudflare.com/ajax/libs/lodash.js/2.4.1/lodash.js"></script>






JavaScript:

app.controller('myCtrl', function ($scope){
    var ctrl = this;
   // 使用 Lo-Dash
    ctrl.list = _.range(1911, 2014);
})

完整範例 http://plnkr.co/edit/vP1AKDrFzYbYZcbVcQG5?p=preview

可是,竟然我們已經用了 AngularJS 框架了, 來點 AngularJS 的味道吧。

方法 1. 把 Lo-Dash 放在 factory 做成一個 Service。

app.factory('lodash', ['$window', function($window) {
  return $window._; // LoDash 一定要先 include 進來
}])

app.controller('myCtrl', ['$scope', 'lodash', function ($scope, _ ){
  // 這邊的 _ 代表 Lo-Dash
}])

方法 2. 把 Lo-Dash 獨立成一個 module

angular.module(‘LoDash', []).factory(‘lodash', function($window) {
    return $window._; // LoDash 一定要先 include 進來
});

app.module('myApp', ['LoDash']);

app.controller('myCtrl', ['$scope', 'lodash', function ($scope, _){
  // 這邊的 _ 代表 Lo-Dash
}])

參考 angular-lodash-module

個人喜歡第二種,因為第一種方法不適用當架構有多個 modules ( Modularity ),
這樣會造成每個 modules 都要有 LoDash factory。

方法 3. 直接使用 _ 在程式中 ( global variable 用法)
不在外面特定包任何 service 或 Module。
覺得上面兩種方法有點多此一舉的朋友可以直接用 _。
(這樣好方便阿,可是未來會不好維護的感覺... )
假如有使用 use strict ,直接用 _ 會有 warning 噢。

大家快去下載 Lo-Dash 吧~ (推坑


聽過 Lo-Dash 的人,應該也聽過 Underscore.js。
Lo-Dash 是當初一些人因覺得 Underscore.js 的團隊維護效率很低, issue 修很慢。 (註一)
所以自己 fork 出來修改,想完成更有效率跟跨瀏覽器的 library。
( Lo-Dash 官網有 'Features not in Underscore' 的文章,可見戰意十足)

因為 Lo-Dash 立足於 Underscore.js, 所以用 Underscore.js 的人可無痛換到 Lo-Dash 的。
(網路上有很多比較文,可以去看看後再決定 :-P )

註一: Lo-Dash作者在 Stack Overflow 解釋 為什麼出來做 Lo-Dash


上一篇
AngularJS - MVC 架構 - DEMO
下一篇
ng-if & ng-show
系列文
我在前端 ng 時30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
0
holmes2136
iT邦新手 3 級 ‧ 2014-10-03 14:26:13

這跟 Underscore 用的 namespace 還有專注的點真像...

0
holmes2136
iT邦新手 3 級 ‧ 2014-10-03 14:26:51

剛才沒看到文章下面就回覆了...Orz

0
yvonneyu
iT邦新手 3 級 ‧ 2014-10-03 14:33:14

沒關係,我剛剛格式也沒有用好,所以下面文章被 JavaScript 的色塊擋住了。
而且你說的也沒錯~ XD

0
holmes2136
iT邦新手 3 級 ‧ 2014-10-03 22:57:28

Lo-Dash 看起來從 2013年開始崛起 (Google trend) , 難怪我沒追到.. Orz..

我要留言

立即登入留言