2017-06-16 42 views
-3

我有一些基本的角代碼斂導航菜單爲登錄和註銷的用戶,並存儲在菜單$localStorage然後將它們切換到$rootScope當輸入/輸出等右側分配 - 這怎麼可能?

下面在用戶登錄就是一個簡化版本代碼爲這個問題的目的。

看起來好像其中一行代碼實際上會導致左側被分配到右側。

$localStorage.navigation = {}; 
$rootScope.nav = {}; 

// save the nav menus in local storage 
$localStorage.navigation.loggedIn = "nav menu json";  

// use local storage to set the rootscope 
$rootScope.nav = $localStorage.navigation; 

/* should be.. 
    $rootScope.nav = {loggedIn:'nav menu json'}; 
    $localStorage.navigation = {loggedIn:'nav menu json'}; 
*/ 

// set the nav menu - Right-hand-assignment??? 
$rootScope.nav.current = $localStorage.navigation.loggedIn; 

/* should be.. 
    $rootScope.nav = { loggedIn:'nav menu json', current: 'nav menu json' }; 
    $localStorage.navigation = { loggedIn:'nav menu json' }; 
*/ 

console.log($rootScope.nav.current); // 'nav menu json' as expected 
console.log($localStorage.navigation.current); // 'nav menu json', WHAT??!! 

/* actually.. 
    $rootScope.nav = { loggedIn:'nav menu json', current: 'nav menu json' }; 
    $localStorage.navigation = { loggedIn:'nav menu json', current: 'nav menu json' }; 
*/ 

在這裏發生了什麼?

+1

這個'$ rootScope.nav = $ localStorage.navigation;'傳遞一個對象引用...覆蓋最初的空對象。 –

回答

3

因爲$localStorage.navigation是一個對象不是原始(BooleanNumberString),這條線分配參考,而不是一個複製的$localStorage.navigation$rootScope.nav

$rootScope.nav = $localStorage.navigation; 

此時,$localStorage.navigation$rootScope.nav是兩個引用完全相同的對象。這條線:

$rootScope.nav.current = $localStorage.navigation.loggedIn; 

是一個分配的原始值$localStorage.navigation.loggedIn$rootScope.nav.current,但由於$localStorage.navigation$rootScope.nav是完全相同的對象,$localStorage.navigation.current指的是相同的值$rootScope.nav.current

需要明確的是,右手工側面任務是不可能

+0

看起來好像我今天學到了東西。謝謝! – yevg

+0

我很高興它幫助! – bkbooth