angular 例項筆記之巢狀指令間的傳參

2022-05-06 09:12:13 字數 1260 閱讀 7800

首先,關於directive的scope繫結作用域網上已經有一大堆了,無非就是scope的三種繫結方式,@,=和&,在設定上對應的繫結屬性後即可從父作用域中繼承並建立乙個獨立作用域,如

//

html中

//js中

() }

', restrict: 'ae',

scope:,

link:

function

(scope, ele, attrs)

};});

這樣通過給name賦值,即可在指令中拿到想要的資料,但是在做指令巢狀時(即乙個指令1中引用了另乙個指令2),這麼寫卻拿不到需要的資料,總是undefined,這是為什麼呢?

答案就是angular的指令是從內向外構建生成的,所以指令2會先被渲染執行,而在這個時候指令1中的資料還沒有獲得(比如該資料是通過介面非同步獲取的),那麼指令2中當然就拿不到了,關於解決方式,個人認為最簡單的就是用$timeout,如

html稍作改動

第乙個指令

第二個指令

js中就只寫第二個指令的directive了,不在重複第乙個

($timeout) }

', restrict: 'ae', scope:,

link:

function

(scope, ele, attrs) ,100);

} };

});這樣就可以獲得繫結後的引數了,原理大概就是$timeout會將其中的方法延後執行(排在佇列的最後),也就是所有的dom都渲染完畢,事件都建立宣告之後才會執行,所以這時候資料是已經賦值過後的,但是這個方法的缺點就是比較耗用記憶體,所以一定要

記著清除定時器,否則很容易頁面崩潰

這個就是從外向內傳參,那麼如果從內向外傳參呢,只要直接使用scope自己的繫結方式&即可,通過**函式,外面的scope就可以拿到裡面返回過去的引數了,記著要是乙個物件,key value的形式如

第二個指令

() }

', restrict: 'ae',

scope:,

link:

function

(scope, ele, attrs) )

} };

});這樣在使用my-child的那個作用域下,name2這個方法所帶的引數就是內部指令丟擲的引數。

以上就是一點點個人理解,主要是為了以後再專案中遇到類似的問題有個思考的方向,有不足的地方歡迎補充指正

Angular複習筆記5 指令

在angular中,指令是乙個重要的概念,它作用在特定的dom元素上,可以擴充套件這個元素的功能,為元素增加新的行為。本質上,元件可以被理解為一種帶有檢視的指令。元件繼承自指令,是指令的乙個子類,通常被用來構造ui控制項。指令的使用並不複雜,它與html元素屬性的使用方式相似。不同的是,html語法...

angular學習筆記(6) 指令

angular1學習筆記 6 指令 restrict 匹配模式 1.a 屬性 2.m 注釋 3.e 元素 4.c 樣式類 注釋留空兩邊 推薦使用元素和屬性的方式使用指令 當需要建立帶有自己的模板的指令時,使用元素名稱的方式建立指令 當需要為已有的html標籤增加功能時,使用屬性的方式建立指令 sco...

Angular筆記 之 環境搭建

開啟終端,輸入node v 檢查是否安裝成功 檢查npm 將npm的登錄檔源設定為國內的映象 npm映象 有很多方法來配置npm的registry位址,下面根據不同情境列出幾種比較常用的方法。以 npm映象舉例 1 臨時使用 npm registry install express 2 持久使用 n...