programing

각도 $위치패스가 기능하지 않음

mailnote 2023. 3. 17. 21:46
반응형

각도 $위치패스가 기능하지 않음

이것과 비슷하지만 다른 질문이 있습니다.

여기서 핸들러의 이벤트청취자를 추가하려고 합니다.

app.run(function ($location, $window, $rootScope) {
  $window.addEventListener('message', function(e) {
      $location.path("/abc");
      console.log($location.path()); // this prints "/abc" as expected

      $rootScope.$apply(); // this has no effect

      $scope = angular.element(document).scope(); // this is the same as $rootScope
      $scope.$apply(); // so this also has no effect
  });
});

$location.pathAngular가 인식하지 못하고 있습니다.

또 다른 질문은 내가 전화해야 한다는 것이다.$apply()스코프에는 있지만, 제가 이용할 수 있는 유일한 스코프는$rootScope및 호출$apply()효과가 없는 것 같아요

답변에 대한 코멘트는 스코프를 얻을 수 있음을 시사합니다.

$scope = angular.element(document).scope()

하지만 이것은 나에게$rootScope안 먹히네요

어떻게 하면 각도가 바뀌어 다시 초점을 맞출 수 있을까요?$location.path()를 등록하는 더 좋은 방법이 있나요?message경로를 변경할 수 있는 방법으로 콜백할 수 있습니까?

식을 함수로 실행해야 합니다.$apply()같은 방법

app.run(function ($location, $window, $rootScope) {
  $window.addEventListener('message', function(e) {
      $rootScope.$apply(function() {
        $location.path("/abc");
        console.log($location.path());
      });
  });
});

매뉴얼을 참조하십시오.ng$rootScope($rootScope 。스코프

검정성을 향상시키려면$console대신console그 물체도 주입할 수 있습니다.

인정된 솔루션은 적절한 방법이 아닙니다.($apply()가 하는) 다이제스트 사이클을 간섭할 필요는 없습니다.

가장 좋은 방법은 메인 컨트롤러에서 $location.path()를 호출하는 것입니다.사용하다$emit - $onMainController로 전송하여 $location을 호출하는 함수입니다.경로입니다.다이제스트 사이클을 방해하지 않고 완벽하게 리디렉션됩니다.이게 도움이 됐으면 좋겠어요.

저도 같은 문제가 있었습니다만, 제 실수는 제 아이템에서 ng-click 디렉티브를 잘못 실행하고 있었다는 것입니다.

나쁜 예:

<a **href="#"** ng-click="myFunctionChangeLocationPath()">...

예:

<a ng-click="myFunctionChangeLocationPath()">...

그러면 문제를 해결할 수 있습니다!

$timeout이 없는 솔루션이 있습니다.

$state.go를 사용하기 전에 기본 상태로 리다이렉트하지 않도록 합니다.

event.preventDefault();
$state.go('root');

언급URL : https://stackoverflow.com/questions/19359553/angular-location-path-not-working

반응형