Назначение данных через сервис, не обновляемый в Angular JS

#angularjs #angularjs-directive #angularjs-scope #angularjs-ng-repeat #angular-services

#angularjs #angularjs-директива #angularjs-область #angularjs-ng-repeat #angular-сервисы

Вопрос:

Я написал сервис для обмена и обновления данных между контроллерами

 myApp.service('Physician',function($http){
 var physicians = [];

 var refresh = function(fetch) {
  physicians = []

  $http({
   url: '/provider/',
   method: 'GET',
  }).success(function (response) {
   $.each(response, function(index, value){
     physicians.push(value);
   });
   console.log(physicians);
  });
 }


return {
 refresh: refresh,
 all: physicians
};
})
  

Я включил вышеупомянутую службу в свой контроллер

 function physicianController($scope, $http, Physician) {
  $scope.physicians = Physician.all
}
  

Теперь у меня есть другой контроллер, который использует службу врача и вызывает в нем функцию обновления.

 function conditionController($scope, $http, Physician) {
  $scope.add = function() {
   Physician.refresh();
  }
}
  

Как только вызывается функция обновления, я ожидаю, что $scope.physicians в physicianController будет обновлен, но это не так, любые советы будут полезны.

Комментарии:

1. physicians = [] в основном присваивает новую ссылку physicians переменной. AngularJS полагается на него, чтобы сохранить ту же ссылку, чтобы иметь возможность отслеживать изменения. Таким образом, вам нужно очистить массив, а не повторно инициализировать его. A.splice(0,A.length) должно сработать.

2. Спасибо Серджиу, он работает.

3. вы также можете назначить сервис в качестве переменной области видимости, которая тоже должна работать

4. @DayanMorenoLeon: Можете ли вы дать какую-нибудь ссылку на сервис в качестве переменной области видимости, это будет полная помощь 🙂

5. просто сделайте $scope.variable=Service;

Ответ №1:

Ответ @Sergiu Paraschiv: physicians = [] в основном присваивает новую ссылку переменной physicians. AngularJS полагается на него, чтобы сохранить ту же ссылку, чтобы иметь возможность отслеживать изменения. Таким образом, вам нужно очистить массив, а не повторно инициализировать его. A.соединение (0, A.длина) должно работать