嗯,我在這裏有個問題。我有一個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並使用APIResponse中的新值更新屏幕上的視圖。因爲,指令視圖是使用ng-show控制的,所以新值在視圖中保持不變。這個函數在控制器的每個指令調用中被調用一次,第一個參數爲-1。但在此之後,它又以「未定義」的第一個值運行。在未定義的情況下,它會像指令編譯一樣運行多次。因此,target.targets.years [1] .values.data [$ index]變得未定義。
任何想法什麼是錯的?幾個小時我一直在撓頭。
你可以添加一些代碼..?以獲得更多的想法正在發生什麼.. –
@PankajParkar請再看看。以防萬一,語言不清。 –
您能否提供樣本數據的樣本plunkr? – Grundy