서비스 내에서 $watch?
셋업이 가능합니까?$watch서비스 내의 오브젝트 배열에 대해 (이것을 원합니다)$watch서비스 내에 있다고 선언할 수 있습니까?
시계 세트에 임의의 식을 추가할 수 있습니다.$rootScope그리고 함수를 사용하는 것이 첫 번째 인수입니다.$watch방법.유사 코드:
$rootScope.$watch(function() {
return //value to be watched;
}, function watchCallback(newValue, oldValue) {
//react on value change here
});
세 번째 Boolean 인수를 잊지 마십시오.$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();
}
update: 서비스 내에서 개인 로컬 변수를 감시하는 경우 $rootScope를 사용하여 승인된 답변을 참조하십시오.로컬 범위 내에서 $scope 변수를 $watch하려는 경우 위의 방법보다 더 좋은 방법이 있습니다.그들은 매우 다른 두 가지를 성취하고 있다.
무엇을 달성하고 싶은지 명확히 할 수 있습니까?제가 알기로는, 당신은 서버로부터 당신의 모델로 오브젝트 배열을 얻고 있습니다.그렇다면 명확하지 않다.
- 어레이 내의 오브젝트가 변경되었는지 여부를 확인하시겠습니까(반복 풀링을 실행하는 경우 서버에 마지막으로 호출한 이후일 수 있습니다).
- 사용자가 프런트 엔드 제어 요소를 통해 어레이 내의 일부 개체를 변경했는지 확인하시겠습니까?
1의 경우 $watch(또는 $watchCollection)를 사용할 필요는 없지만 서버에서 받은 어레이를 반복하여 변경을 확인해야 합니다($watchColleciton과 동일).오브젝트가 현재 보유하고 있는 오브젝트와 다른 경우 오브젝트를 호출합니다.$save()를 지정합니다.
케이스 2의 경우 서비스 함수에 파라미터로 전달된 $scope에서 $watchCollection()을 사용하거나 $rootScope에서 어레이를 유지할 경우 $rootScope를 사용합니다.
시나리오를 명확히 해주시면 실제 코드를 알려드릴 수 있습니다.
방금 두 개의 다른 컨트롤러에 꽤 큰 시계 설정을 한 상황이 있었어요
내 서비스에서 기능하도록 정의한 코드를 복제하고 싶지 않았기 때문에:
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);
}
나는 Angular에 대한 경험이 많지 않다.JS는 이 접근방식의 퍼포먼스 측면에 대해서는 자세히 설명할 수 없지만 효과가 있습니다.
언급URL : https://stackoverflow.com/questions/17806600/watch-inside-a-service
'programing' 카테고리의 다른 글
| 사용자 지정 게시 유형의 사용자 지정 데이터를 표시하는 방법 (0) | 2023.03.11 |
|---|---|
| Wordpress - 용어별 사용자 지정 게시 유형 목록의 사용자 지정 분류 페이지 (0) | 2023.03.11 |
| Oracle에 GUID를 저장하는 방법은 무엇입니까? (0) | 2023.03.11 |
| Wordpress에서의 프래그먼트캐싱(W3TC) 구현 방법 (0) | 2023.03.11 |
| ORA-28000: 계정 잠김 오류 발생 빈도 (0) | 2023.03.11 |