source

각도 JS는 하위 범위 변수 변경을 상위 범위로 전파합니다.

manysource 2023. 4. 5. 22:01

각도 JS는 하위 범위 변수 변경을 상위 범위로 전파합니다.

ChildCtrl에서 '새로운' 변수가 인스턴스화되더라도 변수 변경을 쉽게 ParentCtrl로 전파하려면 어떻게 해야 합니까?최소에서 0달러까지 추가 포인트 제공(실장 용이성 향상)

부모 Ctrl

  • ChildCtrl / ChildCtrl2 / ChildCtrl3 / ChildCtrl4

    • 보다

ChildCtrl은 마스터 레이아웃과 ng뷰를 쉽게 추출할 수 없지만 모두 ParentCtrl의 동일한 기능에 의존합니다.

$scope.searchTerms는 ParentCtrl에 정의되어 있지만 ng-model='searchTerms'가 있는 입력 상자가 하위 컨트롤러 보기에 있습니다.이 변수가 변경되면 ChildCtrls에만 반영되지 않습니다.

예: http://jsfiddle.net/JHwxP/22/

HTML 부분

<div ng-app>
    <div ng-controller="Parent">
        parentX = {{x}} <br/>
        parentY = {{y}}<br/>
        <div ng-controller="Child">
            childX = {{x}}<br/>
            childY = {{y}}<br/>
            <a ng-click="modifyBothScopes()">modifyBothScopes</a><br>
            <br>
            The changes here need to appear in 'Parent'. <input ng-model='y'>
        </div>
    </div>
</div>

컨트롤러

function Parent($scope) {
    $scope.x= 5;
    $scope.y= 5;
}

function Child($scope) {
    $scope.modifyBothScopes= function() {
       $scope.$parent.x++;
    };  
}

갱신하다

현재 공유 서비스 접근방식을 시도하고 있습니다.https://gist.github.com/exclsr/3595424

갱신하다

송신/방송 시스템 시험

해결된 문제:$scope를 보관하고 있었습니다.상위 및 변경 시 하위 $scope에 공간이 생성되었습니다.

솔루션:제가 $scope를 했어야 했어요.부모에서 search.displaces를 사용하고 자녀에서 변경되면 부모로 버블됩니다.

예: http://jsfiddle.net/JHwxP/23/

이는 프로토타입 상속이 작동하는 방식 때문입니다.

당신이 요청할 때$scope.x하위 컨트롤러에서는 x가 해당 범위에 정의되어 있는지 확인하고 정의되지 않은 경우 상위 범위에서 x를 찾습니다.

하위 스코프의 에 할당하는 경우x속성은 하위 범위만 수정합니다.

이 문제를 해결하고 공유 동작을 얻는 쉬운 방법은 객체 또는 배열을 사용하는 것입니다.

function ParentCtrl($scope) {
  $scope.model = {x: 5, y: 5};
}

function ChildCtrl($scope) {
  $scope.update = function(x, y) {
    $scope.model.x = x;
    $scope.model.y = y;
  };
}

여기서 변경은 양쪽 범위에서 모두 표시됩니다.$scope.model는 부모 범위와 자녀 범위 모두에서 동일한 개체를 참조합니다.

존 린드퀴스트가 비디오를 가지고 있어요

참조로 전달할 여러 개체를 만들 필요가 없는 또 다른 솔루션은 상위 컨트롤러에서 설정기 함수를 만드는 것입니다.

function ParentCtrl($scope) {
  $scope.x = 5;
  $scope.y = 5;

  $scope.setX = function(value) {
    $scope.x = value;
  }

  $scope.setY = function(value) {
    $scope.y = value;
  }
}

function ChildCtrl($scope) {
  $scope.update = function(x, y) {
    $scope.setX(x);
    $scope.setY(y);
  };
}

데이터를 같은 오브젝트에 포함시키는 것이 의미가 없을 경우, 이 방법이 더 깨끗하다는 것을 알게 됩니다.

또, 아이에게는, 미쳐 버릴 수도 있습니다.

function ChildCtrl($scope) {
  var superSetX = $scope.setX;
  $scope.setX = function(value) {
    superSetX(value * 2);
  };
  ...
}

이런 걸 찾고 있었어요이것을 읽고 첫 번째 해결책이 나왔다.상위 모델을 하위 컨트롤러와 공유할 수 있습니다.

여기 예가 있습니다.나는 심지어 내 요점을 증명하기 위해 여러 가지 항목들을 사용하고 있다.ChildController는 부모를 바꾸고 있어 마치 모두 같은 우주의 일부인 것처럼 말이야

언급URL : https://stackoverflow.com/questions/16972976/angular-js-propagate-child-scope-variable-changes-to-parent-scope