2014-07-19 43 views
0

我有兩個不同的視圖,但對於他們來說只有一個控制器,因爲它們有幾個共同點。但是當加載第二個視圖時,所有存儲在第一個視圖範圍內的數據都將丟失。 對於這個問題,我發現這非常好的解決方案here保存/恢復幾個範圍變量的angularjs

只有當我的範圍內的數據數量很少,這不是我的情況下,這種解決方案看起來不錯。我有幾個數據存儲在控制器範圍內。所以我想有一種方法來迭代數據(只有我保存的數據不是角度的數據),但我不知道如何迭代這些值。有什麼想法嗎?

+0

不清楚你的意思是「角度數據」與你的數據 – charlietfl

+0

@charlietfl:如果你控制'$ scope'變量,你可以看到大量的數據/以'$'或'$$'開頭的屬性。 –

+1

容易修復...使用'angular.copy()',將去除所有'$$ hashkey'屬性。當你用'$ http'發送數據時,它也會將其剝離。 – charlietfl

回答

0

我有幾分相似的要求,我創建了一個指令,爲了同樣的目的

csapp.directive("csDataStore", ["$location", "$sessionStorage", function ($location, $sessionStorage) { 

    var controllerFunction = ["$scope", function ($scope) { 

     var enter = function() { 
      var storedValue = $sessionStorage[$scope.key]; 
      if (angular.isDefined(storedValue)) $scope.value = storedValue; 
      $scope.onLoad(); 
     }; 
     enter(); 

     var exit = function() { 
      $sessionStorage[$scope.key] = $scope.value; 
     }; 
     $scope.$on("$destroy", function() { exit(); }); 
    }]; 

    return { 
     restrict: "E", 
     scope: { key: '@', value: '=', onLoad: '&' }, 
     controller: controllerFunction 
    }; 
}]); 

我使用這樣

<cs-data-store key="stkh.view" value="filter" on-load="loadData()"></cs-data-store> 

指令所以我們這裏有3個參數:鍵/值,然後在範圍中加載該值時如何操作......因此,將使用的加載回調函數將在$範圍內加載密鑰後調用,該函數將在我使用的$ scope

$ sessionStorage,以保持頁面刷新之間的值...

+0

你能接受/ upvote上面的答案,如果它幫助你 – harishr