2015-11-08 62 views
6

嗯,我在這裏有個問題。我有一個ng-repeat,其中帶有ng-change()的輸入存在。這是指令模板和雙向綁定到父對象的一部分。如果我在輸入框中鍵入內容,一切正常,父對象被更新。但是,當我必須從指令的控制器中替換父對象時,我遇到了一個問題。ng-change函數從輸入內部多次調用ng-repeat

問題是,一旦父對象被替換,視圖就會與新的(替換的)值綁定。同樣在那個時候,相同的函數(如在ng-change()中)被手動觸發以進行一些計算。

但是,我注意到同樣的功能再次被調用(不知道如何)。重要的是ng-model的輸入是未定義的,當它們被自動調用時。結果,最後父對象包含未定義的值。

我仍然困惑,爲什麼在控制器方法調用後,ng-change被調用。是否必須對ng-repeat創建的子範圍做些什麼?

我已經使用$ index索引。 我已經綁定模型parentObj.something.something [$指數]

以上任何幫助表示讚賞...

module.directive('myDirective', function() { 
     return { 
      scope: { 
       target: '=', 
       }, 
      controller: 'DemoController', 
      templateUrl: 'app/demo/html/demo.html' 
} 
}); 

主要模板:

<li ng-repeat="l in group_Main.mains" 
<li ng-repeat="target in l.description.Value track by $index" 
<li ng-repeat="(key, groups) in target.group track by $index"> 
<div layout="row" layout-wrap myDirective target="group"></div> 
</li> 
</li> 
</li> 

app/demo/html/demo.html:指令模板

<div class="table_FY_height" flex ng-repeat="m in months track by $index"> 
<input ng-change="changeIt(target.targets.years[1].values.data[$index], target, year,parent, $index)"" ng-if="$index>currentMonth" ng-model="target.targets.years[1].values.data[$index]"/> 
</div> 

在指令的控制器:

module.controller('DemoController', function($scope, $rootScope){ 
changeIt(-1,$scope.target,$scope.year,$scope.parent); 
} 

從指令的控制器,我試圖調用API和更新目標數據:

http.get(url).then({ 
    function(APIResponse){ 
for(var i=0; i<12; i++){ 
    target.targets.years[1].values.data[i] = APIResponse.targets.years[1].values.data[i] 
}}, function(error){ 
    //error handling here} 
    } 

這樣做可以調用dirrective並使用API​​Response中的新值更新屏幕上的視圖。因爲,指令視圖是使用ng-show控制的,所以新值在視圖中保持不變。這個函數在控制器的每個指令調用中被調用一次,第一個參數爲-1。但在此之後,它又以「未定義」的第一個值運行。在未定義的情況下,它會像指令編譯一樣運行多次。因此,target.targets.years [1] .values.data [$ index]變得未定義。

任何想法什麼是錯的?幾個小時我一直在撓頭。

+0

你可以添加一些代碼..?以獲得更多的想法正在發生什麼.. –

+0

@PankajParkar請再看看。以防萬一,語言不清。 –

+0

您能否提供樣本數據的樣本plunkr? – Grundy

回答

7

我深入研究了這個問題,發現在我的情況下,我有一個directive放置在input標籤上,該標籤在綁定後解析模型。 (它基本上被用於某種四捨五入的方式,所以我刪除了這個邏輯並開始從服務器傳遞四捨五入的數字,問題不再出現)。所以我的結論是第二個ng-change被解僱了,因爲這個模型被指令再次改變了。任何面臨此類問題的人都應在初始綁定後查看模型的其他任何類型的更改。

發佈此爲答案,因爲這是我的情況的解決方案。