Please check this plnkr簡單angularjs隔離範圍嵌套指令
我已閱讀everyhting可以找到有關指令,範圍和隔離範圍。但我仍然無法理解這種工作方式。
只要它不嵌套在另一個指令中,我創建的指令就可以完美工作。
當嵌套時,'localFunc:'& func「'屬性綁定到外部控制器作用域就好了,但'localAttr:'= attr''作用域失敗。
我會永遠感激的是,任何人都可以幫助我理解爲什麼。
Please check this plnkr簡單angularjs隔離範圍嵌套指令
我已閱讀everyhting可以找到有關指令,範圍和隔離範圍。但我仍然無法理解這種工作方式。
只要它不嵌套在另一個指令中,我創建的指令就可以完美工作。
當嵌套時,'localFunc:'& func「'屬性綁定到外部控制器作用域就好了,但'localAttr:'= attr''作用域失敗。
我會永遠感激的是,任何人都可以幫助我理解爲什麼。
形象地,這裏是你的範圍是什麼樣子之前,我們鍵入文本兩種:
注意隔離範圍006的母公司是由指令container
創建的transcluded範圍。因此,範圍006中的searchText
將被數據綁定到範圍005(而不是範圍003),因爲正在使用基元。
如果我們輸入11
到第一個文本框,並22
進入第二個文本框,並再次檢查範圍,我們可以看到在數據綁定發生了:
searchforThis2
在範圍005色的黃色以表明已創建新的財產。發生這種情況是因爲使用了一個原語 - 範圍005在這裏不使用原型繼承,它只是爲它自己創建一個新的原始屬性(即它不在範圍003中查找屬性名稱)。其他黃色項目表示原始值已更改。
正如您已經發現的那樣,此問題的「最佳實踐」解決方案是綁定到父作用域中的對象屬性(而非基元)(即作用域003)。
在你的控制器使用以下:
$scope.obj = {searchforThis1: "Sample Text 1", searchforThis2: "Sample Text 2"};
,並在你的HTML:
<search searchtext="obj.searchforThis1"...>
...
<div container>
<search searchtext="obj.searchforThis2"...>
作用域現在看起來如下:
如果我們輸入11
進入第一個文本框和22
放入第二個文本框並再次檢查範圍,我們可以看到t他的數據綁定發生了:
因爲範圍006是分離的範圍,它使用$parent
去範圍005(如上)。但是,從那裏開始,原型繼承就在發揮作用,因爲我們不使用原始類型。對象屬性searchforThis2
位於範圍003.
永不失敗。小時的谷歌搜索沒有任何結果,直到我實際輸入問題,然後我搜索關鍵字和瞧!答案就會出現。
感謝this very illuminating post我知道我的問題非常常見,甚至有一個名稱 - 「點規則」。
基本上你需要引用控制器上的繼承對象而不是屬性,問題就消失了。
從角度github wiki有益閱讀https://github.com/angular/angular.js/wiki/The-Nuances-of-Scope-Prototypal-Inheritance – charlietfl
感謝您的參考那'非常有啓發性'! – Airn5475
明智的解釋。謝謝。 您是僅僅爲這個問題繪製這些圖表還是您有一些工具可以檢查angularjs範圍並準備這些圖表? – thrag
@thrag,我有一個我寫/正在寫的工具。 –
@MarkRajcok您可否考慮公開發布此工具,以便我們可以動態繪製這些精彩的示波器地圖?我相信很多頭痛可以避免,許多長時間的談話會被保存:) –