2013-02-19 63 views
0

我試圖做與D3和角的東西開火。我不知道這是什麼做與D3的所有,但它留在裏面,這樣我可以重現的一切,我想..手錶不是在一個指令與分離範圍

這裏是再現我的問題普拉克。

http://plnkr.co/edit/sxbKUmeb1B51t9eTtgwH?p=preview

什麼,我試圖做的是,創建數據陣列和產生一組基於該數據D3 SVG圈。創建的指令應該「觀察」這個數據數組,並根據數組收縮或擴大來創建或刪除更多的圓圈。我認爲從那裏開始的邏輯非常簡單。爲了確保我稍後再執行此操作,我正在使用$ timeout向數組中添加一個新值。

回答

1

嗯,首先,此代碼: <circles data="obj.dataArray"></circles>似乎錯了,因爲你沒有在你的範圍obj定義dataArray任何地方。

所以這個:

function($scope,model,$timeout) { 
    $scope.obj = {}; 
     model.data[0] = 20; 
     model.data[1] = 30; 
     model.data[2] = 40; 
     model.data[3] = 50; 

     $timeout(function(){ 

      model.data.push(Math.random()*100); 
      console.log(model.data); 
     },1000); 
} 

也許應該會有一些這樣的:

function($scope,model,$timeout) { 
    $scope.model = model; 
    $scope.model.data[0] = 20; 
    $scope.model.data[1] = 30; 
    $scope.model.data[2] = 40; 
    $scope.model.data[3] = 50; 

    $timeout(function(){ 
     $scope.model.data.push(Math.random()*100); 
     console.log($scope.model.data); 
    },1000); 
} 

這:<circles data="obj.dataArray"></circles>應該是<circles data="model"></circles>

在你的指令

現在,你已經設置了範圍如下:

scope : { 
    data : '&' 
}, 

但應該是:

scope : { 
    data : '=' 
}, 

,因爲要由數據所代表的對象的引用屬性。 &適用於何時屬性包含要執行的表達式。

因此,通過這些更改,指令中的scope.data現在包含對「commonModel」的引用,因此不再需要指令詢問「commonModel」。然後改變你的$ watch觀看「data.length」來知道何時添加或刪除了項目。

事情是這樣的:http://plnkr.co/edit/sa9blROCm8FFhRQSEWii

+0

真棒,感謝..你們中的一些前面提到的東西實際上是「遺蹟」從我的不同的嘗試。我最初只是在控制器在這個普拉克http://plnkr.co/edit/Y0n0MlwtwYTnWt5S3wd1?p=preview,即力力工作範圍對象試了一下,然後我試圖與服務(你看到有)和即使這不起作用!我嘗試了對該對象的引用(scope.obj.data而不是scope.data),該dint也有幫助。 – ganaraj 2013-02-19 12:19:46

+0

它看起來像固定這實際上是看scope.data.length,而不是看scope.data ......我還是,爲什麼看長篇作品,一邊看物體本身犯規不明確的東西!也許我應該deepwatch設置爲true ......好一個看雖然..感謝名單..因爲他們對每一個消化執行,所以留意data.length – ganaraj 2013-02-19 12:21:11

+0

你的表表達式應​​該是儘可能快,如果你是好的只有知道何時添加/刪除元素纔有興趣。如果你真的需要對整個數據結構的手錶,你可以通過「真」作爲第三個參數$表,並會告訴角按值而不是按引用觀看。但在你這樣做之前三思,因爲它帶來了性能損失。 – 2013-02-19 12:33:45