2016-10-18 3 views
1

코드에 ui-sref="portal.main.content"이 여러 개있는 경우 응용 프로그램을 상속했습니다.각도 상태 공급자가 전체 URL을 표시하지 않습니다.

내가 헷갈리는 점은이 상태로 이동하려면/#/portal/main/content를 입력해야한다는 것입니다.

그러나 #없이 페이지에 렌더링됩니다. 따라서 페이지를 클릭 할 때 작동하지만, 존재하지 않기 때문에 새 탭을 열려고하면 작동하지 않습니다. 내가 여기서 무엇을 놓치고 있니?

답변

1

문제는 애플리케이션이 서버 파일 시스템의 실제 리소스에 대한 실제 경로 인 것처럼 URL을 처리하는 서버 환경에서 제공된다는 사실에서 기인합니다. 따라서 하나의 페이지에있는 경우 ui-router이 내부적으로 처리하므로 결과적으로 404 또는 403 개의 오류가 발생하지 않으므로 다른 상태 URL로 이동할 때 다시로드되지 않습니다. 그러나 처음 페이지를로드 할 때 서버를 찾고 있으며 찾으려는 리소스가 없거나 금지되어 있기 때문에 404403 오류가 발생합니다.

파일 (예 : css 및 js 파일)을 참조하지 않을 때 index.html 페이지를 타겟팅하도록 서버 측 환경을 구성하면 모든 URL이 index.html 페이지의 URL로 끝납니다 ui-router가 처리 할 수 ​​있습니다. 각 서버 측 기술 (Apache, IIS, node.js 등)은이를 처리하는 다른 방법을 갖지만 대개 URL 재 작성 모듈과이를 처리하는 유사한 방법이 있습니다.

또한 URL과 같은 해시를 사용하여 문제가되지 않는 경우을 사용 중지하여 ui-router이 그런 일을하지 못하게 할 수 있습니다. 당신은 당신의 .config$locationProvider를 주입 등처럼 사용하지 않도록 설정하여이를 달성 할 수 있습니다 : 예를 들어 $locationProvider.html5Mode(false);

:

angular.module('myApp', ['ui.router']) 
    .config(function ($stateProvider, $locationProvider) { 
     $stateProvider 
      .state('home', { 
       url: '', 
       templateUrl: 'views/home.html', 
       controller: 'HomeCtrl' 
      }) 
      .state('about', { 
       url: '/about', 
       templateUrl: 'views/about.html', 
       controller: 'aboutCtrl' 
      }); 

     $locationProvider.html5Mode(false); 
    }); 
+0

수정. 그렇다면 ui-sref를 사용할 때 해시가 URL의 일부분이되도록 어떻게 렌더링해야합니까? 수동으로 URL을 해시로 입력하면 정상적으로 작동합니다. – KingKongFrog

+0

@ KingKongFrog가 이전 댓글에서 질문에 대답하고 대답을 업데이트했습니다. –

관련 문제