2013-10-04 3 views
0

У меня проблема в AngularJS, где $scope.$watchCollection() выдает сообщение об ошибке. Я уменьшил свой код до точки, где это точно так же, как пример кода в документации (http://docs.angularjs.org/api/ng $ rootScope.Scope # $ watchCollection.), А ошибка все еще брошено:

function OverviewCtrl($scope) { 
    $scope.names = ['igor', 'matias', 'misko', 'james']; 
    $scope.dataCount = 4; 

    $scope.$watchCollection('names', function(newNames, oldNames) { 
    $scope.dataCount = newNames.length; 
    }); 
} 

Я получаю ошибку

'undefined' is not a function (evaluating '$scope.$watchCollection('names', function(newNames, oldNames) { 
    $scope.dataCount = newNames.length; 
})') 

Я понятия не имею, в чем проблема. Я делаю именно то, что говорят документы, за исключением того, что я помещаю его в контроллер, но, похоже, этот код предназначен для использования в контроллерах. Так в чем проблема?

+1

Какую версию углового вы используете? '$ watchCollection' - довольно новая функция. –

+0

1.0.6. Последняя стабильная версия, похоже, 1.0.8. – mcv

+0

Обновление до 1.2.0-rc2, похоже, делает трюк. Также необходимо было явно включить routeProvider для работы приложения. (Интересно, не означает ли это, что я могу полностью отключить routeProvider, я не хочу, чтобы мои представления напрямую привязывались к URL-адресам.) – mcv

ответ

4

Вы также можете использовать следующий синтаксис:

$scope.$watch('myCollection', function(value, oldValue) { 
    // insert awesome code here 
}, true); 

Параметр true говорит AngularJS к "deepwatch" значение.

+0

Насколько он будет смотреть? В основном есть две вещи, которые меня интересуют: все элементы добавлены в список, и для каждого элемента в списке есть несколько свойств, которые меня интересуют, но не все. Поэтому я планировал нечетный '$ watchCollection', а затем для каждого элемента несколько конкретных' $ watch ('item.name') 'и глубокие' $ watch ('item.sublist', function, true) '. Или один глубокий просмотр будет работать лучше? – mcv

+0

Дело в том, почему бы вам не использовать глубокие часы? Он будет отвечать на ваши потребности (смотреть как длину массива, так и содержимое внутренних элементов массива), но может привести к некоторым ловушкам. Основными неудобствами с глубокими часами являются низкая производительность на огромных объектах или массивах, а также тот факт, что это может привести к избыточным циклам $ digest и сбою вашего приложения. – LoremIpsum

+0

Моя модель может быть довольно большой. Не все нужно постоянно проверять. Но что еще более важно, если я глубоко все смотрю, и что-то меняется, я до сих пор не знаю, что на самом деле изменилось, не так ли? Поэтому мне нужно все проверить вручную. Это, я думаю, сделает глубокие часы совершенно бесполезными для меня. За исключением объекта item.sublist; если что-то изменится там, я собираюсь перерисовать все это. – mcv

Смежные вопросы