SPA (Single Page Applications) single-page-applications

NOTE
Adobe 단일 페이지 애플리케이션 프레임워크 기반 클라이언트측 렌더링(예: React)이 필요한 프로젝트에는 SPA Editor를 사용하는 것이 좋습니다. 자세히 알아보기.

단일 페이지 애플리케이션 (SPA)는 웹 기술을 사용하여 원활한 경험을 구축하는 데 가장 효과적인 패턴으로 널리 간주되는 중요한 수준에 도달했습니다. SPA 패턴을 따라 데스크탑 또는 모바일 애플리케이션과 동일하게 수행되지만 개방형 웹 표준에서의 기반 때문에 다양한 디바이스 플랫폼 및 폼 팩터에 도달하는 애플리케이션을 만들 수 있습니다.

일반적으로 SPA은 전체 HTML 페이지를 로드하기 때문에 기존 페이지 기반 웹 사이트보다 성능이 더 우수합니다 한 번만 (CSS, JS 및 지원 글꼴 콘텐츠 포함), 그런 다음 앱에서 상태가 변경될 때마다 필요한 내용만 로드합니다. 이 상태 변경에 필요한 사항은 선택한 기술 세트에 따라 다를 수 있지만, 일반적으로 기존 '보기'를 대체할 단일 HTML 조각과 새 보기를 연결하고 필요할 수 있는 모든 클라이언트측 템플릿 렌더링을 수행하는 JS 코드 블록 실행을 포함합니다. 템플릿 캐싱 메커니즘을 지원하거나 Adobe PhoneGap을 사용하는 경우 템플릿 콘텐츠에 대한 오프라인 액세스를 통해 이 상태 변경 속도를 더욱 향상시킬 수 있습니다.

AEM 6.1은 AEM 앱을 통해 SPA의 구축 및 관리를 지원합니다. 이 문서에서는 SPA 이면의 개념과 해당 개념 사용 방법에 대해 소개합니다 AngularJs 브랜드를 App Store 및 Google Play으로 가져오기.

AEM 앱의 SPA spa-in-aem-apps

AEM Apps의 단일 페이지 애플리케이션 프레임워크를 사용하면 AngularJS 앱의 고성능을 활성화하면서도 작성자(또는 기타 비기술 담당자)는 전통적으로 웹 사이트 관리에 예약되어 있던 터치 최적화, 드래그 앤 드롭 편집기 환경을 통해 앱의 콘텐츠를 만들고 관리할 수 있습니다. AEM으로 사이트가 이미 구축되어 있습니까? AEM 앱에서는 콘텐츠, 구성 요소, 워크플로우, 에셋 및 권한을 쉽게 재사용할 수 있습니다.

AngularJS 애플리케이션 모듈 angularjs-application-module

AEM Apps는 앱의 최상위 모듈을 구성하는 등 AngularJS 구성의 대부분을 처리합니다. 기본적으로 이 모듈의 이름은 'AEMAngularApp'이며 해당 생성을 담당하는 스크립트는 /libs/mobileapps/components/angular/ng-page/angular-app-module.js.jsp에서 찾을 수 있습니다(및 오버레이됨).

앱 초기화의 일부에는 앱이 종속된 AngularJS 모듈을 지정하는 작업이 포함됩니다. 앱에서 사용하는 모듈 목록은 /libs/mobileapps/components/angular/ng-page/angular-module-list.js.jsp에 있는 스크립트에 의해 지정되며 앱의 페이지 구성 요소에 의해 오버레이되어 앱에 필요한 추가 AngularJS 모듈을 가져올 수 있습니다. 예를 들어 위의 스크립트를 Geometrixx 구현(https://experienceleague.adobe.com/apps/geometrixx-outdoors-app/components/angular/ng-geometrixx-page/angular-module-list.js.jsp%EC%97%90%20%EC%9E%88%EC%9D%8C?lang=ko)과 비교합니다.

앱의 고유한 상태 간 탐색을 지원하기 위해 angular-앱-모듈 스크립트는 최상위 앱 페이지의 모든 하위 페이지를 반복하여 '경로' 집합을 생성하고 Angular의 $routeProvider 서비스에서 각 경로를 구성합니다. 실제 모습에 대한 예를 보려면 Geometrixx Outdoors 앱 샘플에서 생성한 angular-앱-모듈 스크립트를 참조하십시오. (링크에는 로컬 인스턴스가 필요합니다.) http://localhost:4502/content/phonegap/conference-app/en/home.angular-app-module.js

생성된 AEMAngularApp을 자세히 살펴보면 다음과 같이 일련의 경로가 지정됩니다.

$routeProvider
.when('/content/phonegap/geometrixx-outdoors/en/home/products/:id', {
    templateUrl: 'home/products.template.html',
    controller: 'contentphonegapgeometrixxoutdoorsenhomeproducts'
})

특히 위의 샘플은 경로의 일부로서 파라미터를 전달하는 예를 예시한다. 이 예에서는 지정된 패턴(https://experienceleague.adobe.com/content/phonegap/geometrixx-outdoors/en/home/products/:id?lang=ko)을 충족하는 경로가 요청되면 home/products.template.html 템플릿으로 처리하고 'contentphonegapgeometrixxoutdoorsenhomeproducts' 컨트롤러를 사용해야 함을 나타냅니다.

이 경로가 요청될 때 로드할 템플릿은 templateUrl 속성에 의해 지정됩니다. 이 템플릿에는 페이지에 포함된 AEM 구성 요소의 HTML과 애플리케이션의 클라이언트측 배선에 필요한 AngularJS 지시문이 포함되어 있습니다. Geometrixx 구성 요소의 AngularJS 지시문 예제를 보려면 스와이프-캐러셀의 template.jsp(https://experienceleague.adobe.com/apps/geometrixx-outdoors-app/components/swipe-carousel/template.jsp?lang=ko)의 45행을 살펴보십시오.

페이지 컨트롤러 page-controllers

angular 자신의 표현으로, "컨트롤러는 Angular 범위를 확장하는 데 사용되는 JavaScript 생성자 함수입니다." (소스) AEM 앱의 각 페이지는 컨트롤러까지 자동으로 배선됩니다. 이 컨트롤러는 frameworkType / angular. angular 예로서 ng-text 구성 요소(https://experienceleague.adobe.com/libs/mobileapps/components/template/ng-text?lang=ko)를 살펴봅니다. cq:template 노드는 이 구성 요소가 페이지에 추가될 때마다 이 중요한 속성을 포함하도록 합니다.

보다 복잡한 컨트롤러 예제의 경우 ng-template-page controller.jsp 스크립트( /apps/geometrixx-outdoors-app/components/angular/ng-template-page에서)를 엽니다. 특히 중요한 것은 실행 시 생성되는 JavaScript 코드이며, 이는 다음과 같이 렌더링됩니다.

// Controller for page 'products'
.controller('contentphonegapgeometrixxoutdoorsenhomeproducts', ['$scope', '$http', '$routeParams',
    function($scope, $http, $routeParams) {
        var sku = $routeParams.id;
        var productPath = '/' + sku.substring(0, 2) + '/' + sku.substring(0, 4) + '/' + sku;
        var data = $http.get('home/products' + productPath + '.angular.json' + cacheKiller);

        /* ng-product component controller (path: content-par/ng-product) */
        data.then(function(response) {
            $scope.contentparngproduct = response.data["content-par/ng-product"].items;
        });

        /* ng-image component controller (path: content-par/ng-product/ng-image) */
        data.then(function(response) {
            $scope.contentparngproductngimage = response.data["content-par/ng-product/ng-image"].items;
        });
    }
])

위의 예에서 의 매개 변수는 $routeParams 서비스를 가져온 다음 JSON 데이터가 저장된 디렉터리 구조로 마이그레이션합니다. SKU 처리 id 이러한 방식으로 잠재적으로 수천 개의 개별 제품에 대한 제품 데이터를 렌더링할 수 있는 단일 제품 템플릿을 전달할 수 있습니다. 이는 (잠재적으로) 대규모 제품 데이터베이스의 각 항목에 대한 개별 경로가 필요한 훨씬 확장 가능한 모델입니다.

여기에는 두 가지 구성 요소도 있습니다. ng-product는 위에서 추출한 데이터로 범위를 늘립니다 $http 호출합니다. 또한 이 페이지에는 ng-image가 있으며, 이는 또한 응답에서 검색하는 값으로 범위를 늘립니다. angular의 덕택으로 $http 서비스에서는 각 구성 요소가 요청이 완료되고 작성된 약속이 이행될 때까지 인내심을 갖고 기다립니다.

다음 단계 the-next-steps

단일 페이지 애플리케이션에 대해 알아본 후에는 PhoneGap CLI를 사용한 앱 개발.

recommendation-more-help
2eeeb575-8007-40cc-a72d-206fbc4ddd4b