有關自定義指令的scope參數,網上很多文章都在講這3種綁定方式實現的效果是什么,但幾乎沒有人講到底怎么使用,本篇希望聊聊 到底怎么用 這個話題。
一. 自定義指令
自定義指令,是 Angularjs 用來實現組件化的方式,相比于 React 和 Vue 的組件化方式,它真的很復雜,自定義指令太重了,它暴露了太多可供定制的參數,以至于普通的開發者完全不知道要用它來做什么而將其束之高閣,畢竟一般的業務邏輯通過controller和service就已經可以完成了。
自定義指令在 Angularjs 項目中主要有兩大用途:
1.封裝指定組件的DOM操作
Angularjs 期望的開發方式是將DOM的操作盡可能封裝在自定義指令中,這樣對于局部變量的操作會更容易加入到Angular自己的生命周期中。
2.組件化
Angularjs 靠自定義指令實現組件化。諸如你在 React 和 Vue 中看到的類似于 , 這樣的自定義標簽,或是父級子級傳值所使用的 prop ,又或者是標記組件自身狀態的 state ,在 Angularjs 中全部都是通過自定義指令來實現的。
二. 數據綁定的形式
自定義指令在定義后,需要在html文件中編寫,最常用的方式是將其書寫為 標簽屬性。 當使用自定義指令時,常常需要將一個變量的值從controller傳遞至directive中,此時需要在 scope 屬性中進行變量綁定設置, Angularjs 提供了3種不同的綁定方式(實際上也可以直接傳遞True),如下所示:
scope: { infiniteScroll: '=', // 將infiniteScroll同父級controller中的指定對象雙向綁定 onSend: '&', // 從父級獲取一個變量的引用,常用作方法調用 fromName: '@' // 從父級獲取值后便只在本地作用域生效}關于三種綁定方式使用的方法,網上可以搜到非常多的文章,本篇不再贅述,今天我們只來詳細看一下這幾種方式的使用場景和區別。
2.1 @綁定
@綁定 可以轉移常量賦值的位置,常用于為自定義封裝組件暴露一個可設定常量參數的接口。 這種綁定方式的意義,在于從自定義指令外部(一般是從html頁面上綁定一個常量或控制器中的變量)獲取一個局部變量的值。
實際場景:
例如我們封裝了一個分頁組件,其中指令局部作用域中的 displayPaginationNums 屬性用于決定分頁組件的頁碼欄顯示多少個按鈕,然后把剩余的按鈕收起來并添加 ... 按鈕,這是一個很常見的需求。
不使用@綁定
不使用@綁定,完全可以做到,只需要在link函數里,初始化為其賦值即可。
link:function(scope, elements, attrs){ scope.displayPaginationNums = 5;//用于決定分頁導航欄最多可顯示幾個數字 },
新聞熱點
疑難解答
圖片精選