서비스 내에서 $ watch?
$watch
서비스 내부의 객체 배열에 를 설정할 수 있습니까? ( $watch
선언 자체가 서비스 내부에 있기를 원합니다 )?
메서드에 $rootScope
첫 번째 인수를 삽입하고 함수를 사용하여 모든 식을 조사 식 집합에 추가 할 수 있습니다 $watch
. 의사 코드 :
$rootScope.$watch(function() {
return //value to be watched;
}, function watchCallback(newValue, oldValue) {
//react on value change here
});
$watch
메서드 에 대한 세 번째 부울 인수를 잊지 마십시오 . true
전체 개체의 변경 사항을 자세히 살펴보고 싶은지 여부 를 지정해야합니다 .
그 성격 상 서비스는 클래스와 하우스 방식과 같습니다. 인수가 범위이고 조사 식을 적용하는 컨트롤러에서 호출하는 메서드를 설정할 수 있습니다.
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();
}
업데이트 : 서비스 내부의 개인 지역 변수를 감시하려는 경우 $ rootScope를 사용하여 허용 된 답변을 참조하십시오. 위의 것보다 로컬 범위 내에서 $ scope 변수를 $ watch하려고하는 것이 최선의 방법입니다. 그들은 매우 다른 두 가지를 성취하고 있습니다.
달성하고자하는 것을 명확히 할 수 있습니까? 내가 이해했듯이 서버에서 모델로 객체 배열을 가져옵니다. 그렇다면 명확하지 않습니다.
- 어레이의 일부 개체가 변경되었는지 확인 하시겠습니까 (반복 풀링을 수행하는 경우 서버에 대한 마지막 호출 이후)?
- 배열의 일부 개체가 프런트 엔드 컨트롤 요소를 통해 사용자에 의해 변경되었는지 확인 하시겠습니까?
경우 1의 경우 실제로 $ watch (또는 $ watchCollection)를 사용할 필요는 없지만 서버에서받은 배열을 반복하고 변경 사항을 확인해야합니다 ($ watchColleciton이 수행하는 작업과 동일). 객체가 현재 보유하고있는 객체와 다른 경우이 요소에 대해 object. $ save ()를 호출합니다.
경우 2의 경우 서비스 함수에 매개 변수로 전달 된 $ scope에서 $ watchCollection ()을 사용하거나 $ rootScope에 배열을 보유하는 경우 $ rootScope를 사용합니다.
시나리오를 명확히 해주시면 실제 코드를 제공해 드릴 수 있습니다.
2 개의 다른 컨트롤러에 꽤 큰 시계 설정이있는 상황이있었습니다.
코드를 복제하고 싶지 않았기 때문에 방금 서비스에서 작동하도록 정의했습니다.
angular
.module('invoice')
.factory('invoiceState', function () {
var invoice = {
client_info: {
lastname: "",
firstname: "",
email: "",
phone: "",
id_client: "",
...
}
}
invoice.watchAccommodation = function (newVal, oldVal) {
var accommodation = newVal;
//Whatever you would normally have in your watch function
}
그런 다음 서비스를 삽입 한 컨트롤러의 시계에서이 함수를 호출 할 수 있습니다.
function NewInvoiceCtrl(invoiceState) {
$scope.$watch('invoice.accommodation',invoiceState.watchAccommodation, true);
}
I do not have much experience with AngularJS so I can't really go into the performance aspects of this approach but it works ;)
참고URL : https://stackoverflow.com/questions/17806600/watch-inside-a-service
'Development Tip' 카테고리의 다른 글
Entity Framework-클래스 생성 (0) | 2020.12.03 |
---|---|
yaml 파일 구문 분석 오류 : 여기에 매핑 값이 허용되지 않습니다. (0) | 2020.12.03 |
파이썬 문자열의 첫 번째와 마지막 문자 확인 (0) | 2020.12.03 |
SQL Server 2000 : 저장 프로 시저를 종료하는 방법은 무엇입니까? (0) | 2020.12.03 |
if 문에 상수를 먼저 넣는 이유는 무엇입니까? (0) | 2020.12.03 |