2016-05-12 24 views
0

我在我的應用程序中有一個奇怪的行爲。angularjs - 父範圍未創建,但仍在頁面上可見

基本上,我有一個主頁叫做細節,裏面的細節叫做detailsAlldetailsEdit

默認的是detailsAll

如果我使用的應用程序,從導航到detailsAlldetailsEdit,一切正常,但是,如果我直接從detailsEdit加載應用程序,從details範圍是不確定的。

它是有道理的,因爲它可能還沒有創建,因爲我從來沒有到過那個頁面,但爲什麼即使它是未定義的(console.log打印undefined)我仍然可以看到打印在我的頁面上的數據?

有一個更好的例子在這裏:https://plnkr.co/edit/qBtT5gkVSkYfjbngZVqw?p=preview

所以,當你近似熵的應用程序,網址如下:#/app/1(hard coded for test only)/edit/day/1等的第一頁是detailsEdit子視圖。

正如您所見,名爲onlyOne的範圍(從我的父級創建)在頁面上可見,但同一確切範圍在控制檯中返回undefined。

$scope.test = $scope.onlyOne也是如此。沒有顯示,但如果你回到使用黃色按鈕,然後選擇其他的東西,那麼它的工作原理。

如果您看到它在行動中很容易理解,所以請參閱上面的砰砰聲。

爲什麼這樣做?我雖然是與緩存相關的東西,但我試圖硬復位,沒有任何改變。

任何幫助?

在此先感謝

回答

1

如果父母範圍有一個屬性,那麼孩子將繼承它的值,否則它會創建它自己的屬性和空值分配給它。在稍後的時間點,如果父母定義了相同的屬性,那麼孩子將忽略父母的值。 在您的情況下,當您剛剛打開/ app/1/edit/day/1時,子女的$scope.onlyOne正在初始化爲{}和父母的$scope.onlyOne在稍後的時間點被初始化,因爲它是異步調用。這是你面臨的問題的原因。

一種解決方案是在父添加監聽和傳播價值孩子一旦異步調用完成

https://plnkr.co/edit/9jS9qcwgecEJzqsD8L0z?p=preview

+0

但爲什麼即使我其實TY重新創建的範圍孩子使用相同的代碼,在父母中創建相同的範圍它仍然無法工作? – Nick

+0

當然它正在工作,https://plnkr.co/edit/rwxkOXEbfM0z1jOTWEHo?p=preview – CodingNinja

+0

這是一個內存方面不好的做法,讓它再次創建?你認爲這是實現這一目標的最佳和最有效的方式? – Nick

相關問題