2014-01-09 21 views
0

當我在自定義指令 中使用ng-repeat和assign ng-model生成輸入標籤時,它會在每個擊鍵上調用指令。angularjs ng-repeat和ng-model與textarea/input標籤不兼容

這是演示

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

var app = angular.module('myApp', []); 
app.controller('MyCtrl', function($scope) { 
    $scope.arr = ["1234567"]; 
}); 

app.directive('myDirective', function($compile, $timeout) { 
    var num=0; 
    return { 
    link: function(scope, el, attrs) { 
     console.log('this happens with every keyup event in textarea when ng-model is given as arr[$index], why?'); 
    } 
    }; 
}); 


<body ng-app="myApp" ng-controller="MyCtrl"> 
    arr[0] : {{arr[0]}} <br/> 
    <input my-directive ng-repeat="str in arr" ng-model="arr[$index]" /> 
    </input> 
</body> 

很奇怪。

回答

1

這是因爲ng-repeat是每次更改arr陣列,因爲它必須看着它的時間重新評估(見行L256 here在Github上ngRepeat源)

如果指向另一個陣列模式,一切都OK 。

您可以通過此Plunkr查看。

+0

也可能想要查看:http://stackoverflow.com/questions/13651578/how-to-unwatch-an-expression這解釋瞭如何有一個大型陣列,你不想看中繼器每個項目。 – TheSharpieOne

+0

我嘗試了'$ index'中的'arr track',消息沒有發生。它有什麼不同? – allenhwkim