Можно ли настроить $watch в массиве объектов внутри службы (я бы хотел, чтобы объявление $watch было внутри службы)?
$ смотреть внутри службы?
Ответ 1
Вы можете добавить любое выражение в набор часов, введя $rootScope и используя функцию, первый аргумент метода $watch. Псевдо-код:
$rootScope.$watch(function() {
  return //value to be watched;
}, function watchCallback(newValue, oldValue) {
  //react on value change here
});
Не забывайте о третьем, логическом аргументе метода $watch. Вам нужно указать true, если вы хотите глубоко просмотреть весь объект для изменений.
Ответ 2
Услугипо самой своей природе подобны классам и домашним методам. Вы можете настроить метод, который вы вызываете у своего контроллера, аргументом которого является область действия и применяет выражение часов:
app.service('myservice',function(){
    this.listen = function($scope) {
        $scope.$watch(function(){return someScopeValue},function(){
           //$scope.dosomestuff();
        });
    }
});
//your controller
function myCtrl($scope,myservice) {
    $scope.listen = function() {
        myservice.listen($scope);
    }
    //call your method
    $scope.listen();
}
update: если вы пытаетесь посмотреть приватную локальную переменную внутри службы, см. принятый ответ с помощью $rootScope. Если вы пытаетесь $смотреть переменную $scope в локальной области, то это лучший вариант. Они достигают двух очень разных вещей.
Ответ 3
Можете ли вы уточнить, чего вы хотите достичь? Насколько я понимаю, вы получаете массив объектов с сервера в качестве своей модели. Тогда это не понятно:
- Вы хотите проверить, были ли изменены некоторые объекты в массиве (может быть, с момента последнего вызова сервера на случай, если вы повторяетесь Пулы)?
 - Вы хотите проверить, были ли какие-то объекты в массиве изменены пользователем через некоторые элементы управления переднего плана?
 
В случае 1 вам действительно не нужно использовать $watch (или, скорее, $watchCollection), но вы должны перебирать массив, полученный с сервера, и проверять изменения (то же самое, что и $watchColleciton). Если объект отличается от объекта, который вы сейчас используете, вы вызываете объект. $Save() для этого элемента.
В случае 2 используйте $watchCollection() в области $, переданной как параметр вашей служебной функции, или используйте $rootScope, если вы держите свой массив в $rootScope.
Я могу предоставить вам реальный код, если вы уточните сценарии.