據我所知基本上scope
是一個控制器的實例。爲什麼指令有範圍?
每當我聲明一個控制器scope
將可用於該控制器。
但是爲什麼指令在鏈接函數中有scope
?
我沒有爲該指令聲明任何控制器。
那麼爲什麼link
函數有scope
?任何想法 ?
據我所知基本上scope
是一個控制器的實例。爲什麼指令有範圍?
每當我聲明一個控制器scope
將可用於該控制器。
但是爲什麼指令在鏈接函數中有scope
?
我沒有爲該指令聲明任何控制器。
那麼爲什麼link
函數有scope
?任何想法 ?
從doc:
範圍: 範圍由指令用於登記watches使用。
您可能也有興趣查看$scope and scope之間的區別。
所有指令都有一個與它們相關的範圍。他們使用這個範圍來訪問模板和鏈接函數中的數據/方法。默認情況下,除非明確設置,否則指令不會創建自己的作用域。因此,指令使用他們的父範圍(通常是一個控制器)作爲它們自己的。
但是,AngularJS允許我們通過傳遞一個稱爲指令定義對象的配置對象來更改指令的默認範圍。一個指令定義對象 - 我們稱之爲DDO--是一個簡單的JavaScript對象,用於配置指令的行爲,如template..etc。查看關於DDO的AngularJS docs。
因此,我們可以使用範圍內的鏈接函數來處理父範圍,子範圍或隔離範圍。
您可以訪問this瞭解有關範圍內指令的詳細信息。
您可以share the data between controller and linking function。
有時我們想在Angular指令中的控制器和鏈接函數中訪問相同的數據。通常我們將這些數據添加到作用域對象中。這有一些問題,例如將其暴露給任何子範圍。將共享屬性添加到控制器實例本身並在鏈接功能中進行訪問。
您還可能有興趣在what is need of link function?
一個指令是定義「分量」的角度的方式:您可以指定其標記的外觀,以及它如何在與被渲染前後的行爲。鏈接功能允許您在「鏈接」之前或之後將事件掛接到DOM元素(另請參閱:鏈接前鏈接和鏈接後鏈接方法)。當這些事件被激發時,您可能想要更改範圍內的一些變量,這就是爲什麼您可以在鏈接函數中訪問它。
指令有一個控制器....即鏈接和編譯階段修改這個範圍,然後它傳遞給控制器。 –
@CallumLinington你能簡單解釋一下嗎? –