#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.длина) должно работать