2014-03-27 50 views
0

有時我會看到用於描述角度指令的形容詞「可重用」。這有點令人困惑,因爲它有時意味着跨應用程序的可重用性,有時它意味着跨所有應用程序。如果是後者,那麼是否會存在由其他人創建的大量指令庫,從而使您必須編寫自己的指令的概率很小? (例如,與ng-model或ng-show一樣有用的數百個指令)「可重複使用」對角度指令意味着什麼?

假設應用程序內可重用性要求指令爲scope: true,而「全局」可重用性使用隔離範圍,是否正確?

我現在正在編寫指令的方式是特定於應用程序,它們大多隻是使用模板和變形包來封裝複雜的重複的html(帶有使用隔離範圍傳遞的變量),但我覺得像「真正的」指令是像ng -模型。所以只是想知道「可重用」背後是否有兩個含義,一個允許您在任何地方都可以使用超級通用指令,另一個可以「半可重用」,這有助於保持代碼整潔,但對於其他任何地方都適用於特定應用程序。

+2

github是可重用指令的大回購。這裏列出了很多好的:https://github.com/angular/angular.js/wiki/JsFiddle-Examples –

+0

@ j.wittwer酷列表! – user2483724

回答

1

我想說,你的大部分指令都不能在其他應用程序中重用,因爲其中大多數指令都會包含一些特定於你的應用程序的邏輯。但是,能夠在您的應用程序內重用您的指令,或者在您創建的具有相同應用程序邏輯的其他應用程序中,仍然有很大的好處。

可在不同應用程序中重複使用的指令往往是像選項卡,地圖,自動完成等東西。如果您尋找像這樣的UI小部件,AngularUI是一個很好的看看。

您不必在您的指令中使用scope: true以使它們可重複使用。 ng-model例如是非常可重用的(在不同的應用程序之間),但它沒有隔離的範圍。設置scope: true的情況是當您開發需要在範圍中添加屬性的指令時,並且您要求隔離範圍以避免範圍屬性與使用該指令的範本屬性衝突的風險。

+0

謝謝,這清除了一些事情!我只是確保我在創建「錯誤」方式的指令時沒有「好」。 – user2483724

+0

只是爲了增加我的理解。我相信任何指令都可以使用任何類型的作用域(false,child或isolate)編寫。使用false相當於使用全局變量,但可能是不安全的。使用隔離作用域需要每個通過的變量都被明確聲明,但是最安全,你可以把所有的東西都做成一個隔離作用域,但它與使你編寫自己模塊的每個js文件相似。子範圍(範圍:真)是一個體面的中間地帶,模仿js原型鏈,它就像隔離,但默認情況下通過所有父屬性。 – user2483724

+0

我不會說不設置一個獨立的作用域就像使用全局變量一樣。可以肯定的是沒有一個孤立的範圍的用例,你只需要非常小心,不要覆蓋別人的範圍屬性。但沒有一個孤立範圍的主要原因是它更便宜(除非創建數百/數千個實例,否則你不需要考慮),或者你需要與模板範圍進行通信,例如'ng-model '確實。但我的猜測是,你最終寫的大多數指令都會有一個孤立的範圍。 –