programing

서비스 내에서 $watch?

newnotes 2023. 3. 11. 09:24
반응형

서비스 내에서 $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. 어레이 내의 오브젝트가 변경되었는지 여부를 확인하시겠습니까(반복 풀링을 실행하는 경우 서버에 마지막으로 호출한 이후일 수 있습니다).
  2. 사용자가 프런트 엔드 제어 요소를 통해 어레이 내의 일부 개체를 변경했는지 확인하시겠습니까?

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

반응형