とりわけ、その関数が非常に軽量な作業 (たとえば、迅速な計算) を行う場合を除き、Angular 式から関数を呼び出すことは避ける必要があります。この質問には、その問題に関する詳細があります。
あなたの場合、名前リストをキャッシュしてディレクティブにバインドする必要があります。次に例を示します。
app.controller('MainCtrl', function($scope) {
$scope.people = [
{ name: 'Alice'},
{ name: 'Bob' },
{ name: 'Chuck' }
];
$scope.addName = function(name) {
$scope.people.push({name: name});
};
$scope.$watch(function() { return $scope.people.length; }, function() {
$scope.names = $scope.people.map(function(p) { return p.name; });
});
});
ディレクティブ コードは同じままです。これがプランカーのフォークです。
更新$watch
: @KrisBraun のアドバイスに従って、名前リストを自動的に更新するために を使用するようにコードを変更しました。