2014-03-06 105 views
0

我在Angular中有以下代碼,這是一個嘗試在同一個網頁上允許同一個Controller的多個實例。問題是,每次創建新實例時,它都將自身添加到實例對象,但會擦除實例對象上的其他屬性(即實例)。我認爲這是一個與Angular無關的簡單的javascript語法問題,但我無法弄清楚。有什麼建議?爲什麼我的對象的屬性被覆蓋?

angular.module('mean.root').controller('ContentA1Controller', ['$scope', '$location', 'Global', 'Data', '$timeout', '$interval', 'Clients', 'Modals', '$element', function ($scope, $location, Global, Data, $timeout, $interval, Clients, Modals, $element) { 

      // Defaults 
      $scope.instances = { A: {}, B: {}, C: {}, D: {}, E: {}, F: {} }; 

      // Methods 
      $scope.createNewInstance = function() { 
       var instance = $($element).closest('.content-container').attr('id'); 
       // Add ID to content 
       $($element).find('.content').attr("id", "contentA1instance"+instance); 
       Data.priceByDay(function(prices){ 
        // Load Chart Data 
        $scope.instances[instance].data = [1,2,3,4,5]; 
        // Log Instance Object 
        console.log($scope.instances); 

所以,當我添加一個實例給控制器,它的工作原理和我登錄:

$scope.instances = { A: { data: [1,2,3,4,5] }, B: {}, C: {}, D: {}, E: {}, F: {} } 

後來,當我添加另一個實例,再次運行createNewInstance()方法時,它會記錄:

$scope.instances = { A: {}, B: { data: [1,2,3,4,5] }, C: {}, D: {}, E: {}, F: {} } 
+2

也許它重新運行整個控制器? – Bergi

+0

你說得對,當然它,傑什是多麼明顯,現在我需要重新設計compeltely這個.. – ac360

+1

的[AngularJS服務(http://code.angularjs.org/1.2.14/docs/guide /dev_guide.services.creating_services)是保存跨越多個$ scope的數據的好地方 – Hylianpuffball

回答

1
var instance = $($element).closest('.content-container').attr('id'); 
.... 
$scope.instances[instance].data = [1,2,3,4,5]; 

它選擇最接近.content-container到控制器在頁面綁定的元素的id。既然你說你已經使用了兩次控制器,其中一個綁定更接近.content-container#A,另一個更接近.content-container#B。這看起來像代碼是「按設計工作」,但你可能沒有「設計你的意思」。

+0

好的,明確的解釋這裏發生了什麼的方法。謝謝Nate。 – ac360

1

我建議使用爲每個實例不同的控制器,並保持共享數據$ rootScope,或者更好的是使用整個頁面一個位指示並在各實例進行操作,僅在一個地圖項目。