Nice programing

Angular $ location.path가 작동하지 않습니다.

nicepro 2020. 12. 7. 20:40
반응형

Angular $ location.path가 작동하지 않습니다.


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

여기에 window.postMessage핸들러에 대한 이벤트 리스너를 추가하려고 합니다.

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.path각도가 인식되지 않습니다.

또 다른 문제는 내가 전화를해야한다고 말한다 $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.Scope를 참조하십시오 .

테스트 가능성을 높이려면 $console대신 사용 console하고 해당 개체도 주입하십시오.


허용되는 솔루션은이를 수행하는 적절한 방법이 아닙니다. 이상적으로는 다이제스트주기 ($ apply ()가 수행하는)를 방해 할 필요가 없습니다.

나에 따르면 가장 좋은 방법은 MainController에서 $ location.path ()를 호출하는 것입니다. $emit - $on그것을 MainController로 보내고 거기에서 $ location.path를 호출하는 함수를 사용하는 사용 합니다. 다이제스트주기를 방해하지 않고도 완벽하게 리디렉션됩니다. 누군가에게 도움이되기를 바랍니다.


나는 같은 문제가 있었고 내 실수는 내 항목에서 ng-click 지시문을 잘못 실행하고 있었다는 것입니다.

나쁜 예 :

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

예 :

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

따라서 문제를 해결할 수 있습니다!


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

Just prevent redirect to default state before using $state.go

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

참고URL : https://stackoverflow.com/questions/19359553/angular-location-path-not-working

반응형