В angular у меня есть объект, который будет отображаться через мое приложение через службу.
Некоторые из полей этого объекта являются динамическими и будут обновляться как обычно с помощью привязок в контроллерах, которые используют эту службу. Но некоторые из полей являются вычисляемыми свойствами, которые зависят от других полей и требуют динамического обновления.
Вот простой пример (который работает над jsbin здесь). Моя модель обслуживания предоставляет поля a, b и c, где c вычисляется из a + B в calcC(). Обратите внимание, что в моем реальном приложении вычисления намного сложнее, но суть здесь.
Единственный способ, с помощью которого я могу заставить это работать, - привязать мою модель обслуживания к $rootScope, а затем использовать $rootScope.$watch для просмотра любого из контроллеров, изменяющих a или b, и когда они делают, пересчитывая c. Но это кажется уродливым.  Есть ли лучший способ сделать это?
Вторая проблема - производительность. В моем полном приложении a и b представлены большие списки объектов, которые объединяются до c. Это означает, что функции $rootScope.$watch будут выполнять много глубоких проверок массивов, что звучит так, что это повредит производительности.
У меня есть все, что работает с вычисленным подходом в BackBone, который максимально сокращает перерасчет, но angular, похоже, не очень хорошо работает с запланированным подходом. Любые мысли об этом тоже будут хороши.
Вот пример приложения.
var myModule = angular.module('myModule', []);
//A service providing a model available to multiple controllers
myModule.factory('aModel', function($rootScope) {
  var myModel = {
    a: 10,
    b: 10,
    c: null
  };
  //compute c from a and b
  calcC = function() {
    myModel.c = parseInt(myModel.a, 10) * parseInt(myModel.b, 10);
  };
  $rootScope.myModel = myModel;
  $rootScope.$watch('myModel.a', calcC);
  $rootScope.$watch('myModel.b', calcC);
  return myModel;
});
myModule.controller('oneCtrl', function($scope, aModel) {
  $scope.aModel = aModel;
});
myModule.controller('twoCtrl', function($scope, aModel) {
  $scope.anotherModel = aModel;
});
