 {"id":489,"date":"2021-03-29T20:32:59","date_gmt":"2021-03-30T03:32:59","guid":{"rendered":"https:\/\/www.mavice.com\/blog\/?p=489"},"modified":"2021-04-13T10:14:18","modified_gmt":"2021-04-13T17:14:18","slug":"vue-spa-editor-project","status":"publish","type":"post","link":"https:\/\/www.mavice.com\/blog\/vue-spa-editor-project\/","title":{"rendered":"Vue SPA Editor Project"},"content":{"rendered":"\n<p><em>*This article was modeled from the current Adobe React SPA <a href=\"https:\/\/experienceleague.adobe.com\/docs\/experience-manager-learn\/spa-react-tutorial\/create-project.html?lang=en\">documentation<\/a>.<\/em><\/p>\n\n\n\n<p>Learn how to use an Adobe Experience Manager (AEM) Maven project as a starting point for a Vue application integrated with the AEM SPA Editor.<\/p>\n\n\n\n<h2 id=\"objective\">Objective<\/h2>\n\n\n\n<ol><li>Understand the structure of a new AEM SPA Editor project built from a Maven archetype.<\/li><li>Deploy the starter project to a local instance of AEM.<\/li><\/ol>\n\n\n\n<h2 id=\"what-you-will-build\">What you will build<\/h2>\n\n\n\n<p>In this chapter, a new AEM project will be deployed, based on the&nbsp;<a href=\"https:\/\/github.com\/mavicellc\/aem-project-archetype\">Mavice AEM Project Archetype<\/a>. The AEM project will be bootstrapped with a very simple starting point for the Vue SPA. The project used in this chapter will serve as the basis for an implementation of the WKND SPA and will be built upon in future chapters.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" width=\"1024\" height=\"274\" src=\"https:\/\/www.mavice.com\/blog\/wp-content\/uploads\/2021\/03\/Screen-Shot-2021-03-29-at-1.35.40-AM-1024x274.png\" alt=\"\" class=\"wp-image-490\" srcset=\"https:\/\/www.mavice.com\/blog\/wp-content\/uploads\/2021\/03\/Screen-Shot-2021-03-29-at-1.35.40-AM-1024x274.png 1024w, https:\/\/www.mavice.com\/blog\/wp-content\/uploads\/2021\/03\/Screen-Shot-2021-03-29-at-1.35.40-AM-300x80.png 300w, https:\/\/www.mavice.com\/blog\/wp-content\/uploads\/2021\/03\/Screen-Shot-2021-03-29-at-1.35.40-AM-768x205.png 768w, https:\/\/www.mavice.com\/blog\/wp-content\/uploads\/2021\/03\/Screen-Shot-2021-03-29-at-1.35.40-AM-1536x411.png 1536w, https:\/\/www.mavice.com\/blog\/wp-content\/uploads\/2021\/03\/Screen-Shot-2021-03-29-at-1.35.40-AM-2048x548.png 2048w, https:\/\/www.mavice.com\/blog\/wp-content\/uploads\/2021\/03\/Screen-Shot-2021-03-29-at-1.35.40-AM-360x96.png 360w, https:\/\/www.mavice.com\/blog\/wp-content\/uploads\/2021\/03\/Screen-Shot-2021-03-29-at-1.35.40-AM-1040x278.png 1040w, https:\/\/www.mavice.com\/blog\/wp-content\/uploads\/2021\/03\/Screen-Shot-2021-03-29-at-1.35.40-AM-640x171.png 640w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption><em>Starting site hierarchy for the WKND SPA.<\/em><\/figcaption><\/figure>\n\n\n\n<h2 id=\"prerequisites\">Prerequisites<\/h2>\n\n\n\n<p>Review the required tooling and instructions for setting up a&nbsp;<a href=\"https:\/\/www.mavice.com\/blog\/create-your-first-vue-spa-in-aem\/\">local development environment<\/a>. Ensure that a fresh instance of Adobe Experience Manager, started in&nbsp;<strong>author<\/strong>&nbsp;mode, is running locally.<\/p>\n\n\n\n<h2 id=\"get-the-project\">Get the project<\/h2>\n\n\n\n<p>There are several options to create a Maven Multi-module project for AEM. This tutorial used the latest&nbsp;<a href=\"https:\/\/github.com\/mavicellc\/aem-project-archetype\">Mavice AEM Project Archetype<\/a>&nbsp;as a basis for the tutorial code. Modifications have been made to the project code in order to support multiple versions of AEM. Please review&nbsp;<a href=\"https:\/\/experienceleague.adobe.com\/docs\/experience-manager-learn\/spa-react-tutorial\/overview.html?lang=en#compatibility\">the note about backward compatibility<\/a>.<\/p>\n\n\n\n<p><strong>CAUTION<\/strong><\/p>\n\n\n\n<p>It is a best practice to use the&nbsp;<strong>latest<\/strong>&nbsp;version of the archetype&nbsp;to generate a new project for a real-world implementation. AEM projects should target a single version of AEM using the&nbsp;<code>aemVersion<\/code>&nbsp;property of the archetype (Ex. aemVersion=&#8221;6.4.8&#8243;). Mavice has added an <a href=\"https:\/\/github.com\/mavicellc\/aem-project-archetype\">addition<\/a> to the Adobe Archetype 26 which offers an option to use Vue as a value for the frontendModule property. <br><\/p>\n\n\n\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container\">\n<ol><li>Download the starting point for this tutorial via Git<\/li><\/ol>\n\n\n\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container\">\n<pre class=\"wp-block-code\"><code class=\"\">$ git clone git@github.com:mavicellc\/aem-guides-wknd-spa.git\n$ cd aem-guides-wknd-spa\n$ git checkout Vue\/create-project-start<\/code><\/pre>\n<\/div><\/div>\n<\/div><\/div>\n\n\n\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container\">\n<p><br>2. The following folder and file structure represents the AEM Project that was generated by the Maven archetype on the local file system:<\/p>\n<\/div><\/div>\n\n\n\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container\">\n<pre class=\"wp-block-code\"><code class=\"\">|--- aem-guides-wknd-spa\n    |--- all\/\n    |--- core\/\n    |--- dispatcher\/\n    |--- ui.apps\/\n    |--- ui.apps.structure\/\n    |--- ui.content\/\n    |--- ui.frontend \/\n    |--- it.tests\/\n    |--- pom.xml\n    |--- README.md\n    |--- .gitignore\n    |--- archetype.properties<\/code><\/pre>\n<\/div><\/div>\n\n\n\n<p><\/p>\n\n\n\n<p>3. The following properties were used when generating the AEM project from the&nbsp;<a href=\"https:\/\/github.com\/mavicellc\/aem-project-archetype\">Mavice AEM Project archetype:<\/a><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Property<\/th><th>Value<\/th><\/tr><\/thead><tbody><tr><td>aemVersion<\/td><td>cloud<\/td><\/tr><tr><td>appTitle<\/td><td>WKND SPA Vue<\/td><\/tr><tr><td>appId<\/td><td>wknd-spa-vue<\/td><\/tr><tr><td>groupId<\/td><td>com.adobe.aem.guides<\/td><\/tr><tr><td>frontendModule<\/td><td>vue<\/td><\/tr><tr><td>package<\/td><td>com.adobe.aem.guides.wknd.spa.vue<\/td><\/tr><tr><td>includeExamples<\/td><td>n<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 id=\"build-the-project\">Build the project<\/h2>\n\n\n\n<p>Next, compile, build, and deploy the project code to a local instance of AEM using Maven.<\/p>\n\n\n\n<ol><li>Ensure an instance of AEM is running locally on port&nbsp;<strong>4502<\/strong>.<br><\/li><li>From the command line terminal verify that Maven is installed:<\/li><\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">$ mvn --version\n Apache Maven 3.6.2\n Maven home: \/Library\/apache-maven-3.6.2\n Java version: 11.0.4, vendor: Oracle Corporation, runtime: \/Library\/Java\/JavaVirtualMachines\/jdk-11.0.4.jdk\/Contents\/Home<\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<p>3. Run the below Maven command from the&nbsp;<code>aem-guides-wknd-spa<\/code>&nbsp;directory to build and deploy the project to AEM:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">$ mvn clean install -PautoInstallSinglePackage<\/code><\/pre>\n\n\n\n<p><br>If using&nbsp;<a href=\"https:\/\/experienceleague.adobe.com\/docs\/experience-manager-learn\/spa-react-tutorial\/overview.html?lang=en#compatibility\">AEM 6.x<\/a>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">$ mvn clean install -PautoInstallSinglePackage -Pclassic<\/code><\/pre>\n\n\n\n<p><br>The multiple modules of the project should be compiled and deployed to AEM.<br><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\"> [INFO] ------------------------------------------------------------------------\n [INFO] Reactor Summary for wknd-spa-vue 1.0.0-SNAPSHOT:\n [INFO] \n [INFO] wknd-spa-vue ..................................... SUCCESS [  0.523 s]\n [INFO] WKND SPA Vue - Core .............................. SUCCESS [  8.069 s]\n [INFO] wknd-spa-vue.ui.frontend - UI Frontend ........... SUCCESS [01:23 min]\n [INFO] WKND SPA Vue - Repository Structure Package ...... SUCCESS [  0.830 s]\n [INFO] WKND SPA Vue - UI apps ........................... SUCCESS [  4.654 s]\n [INFO] WKND SPA Vue - UI content ........................ SUCCESS [  1.607 s]\n [INFO] WKND SPA Vue - All ............................... SUCCESS [  0.384 s]\n [INFO] WKND SPA Vue - Integration Tests Bundles ......... SUCCESS [  0.770 s]\n [INFO] WKND SPA Vue - Integration Tests Launcher ........ SUCCESS [  1.407 s]\n [INFO] WKND SPA Vue - Dispatcher ........................ SUCCESS [  0.055 s]\n [INFO] ------------------------------------------------------------------------\n [INFO] BUILD SUCCESS\n [INFO] ------------------------------------------------------------------------\n [INFO] Total time:  01:44 min<\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<p>The Maven profile&nbsp;<em><strong>autoInstallSinglePackage<\/strong><\/em>&nbsp;compiles the individual modules of the project and deploys a single package to the AEM instance. By default this package will be deployed to an AEM instance running locally on port&nbsp;<strong>4502<\/strong>&nbsp;and with the credentials of&nbsp;<strong>admin:admin<\/strong>.<\/p>\n\n\n\n<p>4. Navigate to <strong>Package Manager<\/strong>&nbsp;on your local AEM instance:&nbsp;<a href=\"http:\/\/localhost:4502\/crx\/packmgr\/index.jsp\">http:\/\/localhost:4502\/crx\/packmgr\/index.jsp<\/a>. <\/p>\n\n\n\n<p>5. You should see three packages for&nbsp;<code>wknd-spa-vue.all<\/code>,&nbsp;<code>wknd-spa-vue.ui.apps<\/code>&nbsp;and&nbsp;<code>wknd-spa-vue.ui.content<\/code><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" width=\"1024\" height=\"293\" src=\"https:\/\/www.mavice.com\/blog\/wp-content\/uploads\/2021\/03\/Screen-Shot-2021-03-29-at-10.59.41-PM-1024x293.png\" alt=\"\" class=\"wp-image-491\" srcset=\"https:\/\/www.mavice.com\/blog\/wp-content\/uploads\/2021\/03\/Screen-Shot-2021-03-29-at-10.59.41-PM-1024x293.png 1024w, https:\/\/www.mavice.com\/blog\/wp-content\/uploads\/2021\/03\/Screen-Shot-2021-03-29-at-10.59.41-PM-300x86.png 300w, https:\/\/www.mavice.com\/blog\/wp-content\/uploads\/2021\/03\/Screen-Shot-2021-03-29-at-10.59.41-PM-768x220.png 768w, https:\/\/www.mavice.com\/blog\/wp-content\/uploads\/2021\/03\/Screen-Shot-2021-03-29-at-10.59.41-PM-1536x440.png 1536w, https:\/\/www.mavice.com\/blog\/wp-content\/uploads\/2021\/03\/Screen-Shot-2021-03-29-at-10.59.41-PM-2048x587.png 2048w, https:\/\/www.mavice.com\/blog\/wp-content\/uploads\/2021\/03\/Screen-Shot-2021-03-29-at-10.59.41-PM-360x103.png 360w, https:\/\/www.mavice.com\/blog\/wp-content\/uploads\/2021\/03\/Screen-Shot-2021-03-29-at-10.59.41-PM-1040x298.png 1040w, https:\/\/www.mavice.com\/blog\/wp-content\/uploads\/2021\/03\/Screen-Shot-2021-03-29-at-10.59.41-PM-640x183.png 640w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption>AEM Package Manager<br><\/figcaption><\/figure>\n\n\n\n<p>All of the custom code needed for the project will be bundled into these packages and installed on the AEM runtime.<\/p>\n\n\n\n<p>6. You should also see several packages for&nbsp;<code>spa.project.core<\/code>&nbsp;and&nbsp;<code>core.wcm.components<\/code>. These dependencies are automatically included by the archetype. More information about&nbsp;<a href=\"https:\/\/docs.adobe.com\/content\/help\/en\/experience-manager-core-components\/using\/introduction.html\">AEM Core Components can be found here<\/a>.<\/p>\n\n\n\n<p><code>spa.project.core<\/code>&nbsp;is a dependency needed to generate the JSON model API that the SPA Editor expects.<\/p>\n\n\n\n<h2 id=\"author-content\">Author Content<\/h2>\n\n\n\n<p>Next, open the starter SPA that was generated by the archetype and update some of the content.<\/p>\n\n\n\n<p>Navigate to the&nbsp;<strong>Sites<\/strong>&nbsp;console:&nbsp;<a href=\"http:\/\/localhost:4502\/sites.html\/content\">http:\/\/localhost:4502\/sites.html\/content<\/a>.<\/p>\n\n\n\n<ol><li>The WKND SPA includes a basic site structure with a country, language and home page. <br><br>This hierarchy is based on the archetype\u2019s default values for&nbsp;<code>language_country<\/code>&nbsp;and&nbsp;<code>isSingleCountryWebsite<\/code>. These values can be overwritten by updating the&nbsp;<a href=\"https:\/\/github.com\/mavicellc\/aem-project-archetype\">available properties<\/a>&nbsp;when generating a project.<\/li><\/ol>\n\n\n\n<p>2. Open the&nbsp;<strong>us<\/strong>&nbsp;&gt;&nbsp;<strong>en<\/strong>&nbsp;&gt;&nbsp;<strong>WKND SPA Vue Home Page<\/strong>&nbsp;page by selecting the page and clicking the&nbsp;<strong>Edit<\/strong>&nbsp;button in the menu bar.<\/p>\n\n\n\n<p>3. A&nbsp;<strong>Text<\/strong>&nbsp;component has already been added to the page. You can edit this component like any other component in AEM.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" width=\"1024\" height=\"472\" src=\"https:\/\/www.mavice.com\/blog\/wp-content\/uploads\/2021\/03\/Screen-Shot-2021-03-29-at-11.18.55-PM-1024x472.png\" alt=\"\" class=\"wp-image-492\" srcset=\"https:\/\/www.mavice.com\/blog\/wp-content\/uploads\/2021\/03\/Screen-Shot-2021-03-29-at-11.18.55-PM-1024x472.png 1024w, https:\/\/www.mavice.com\/blog\/wp-content\/uploads\/2021\/03\/Screen-Shot-2021-03-29-at-11.18.55-PM-300x138.png 300w, https:\/\/www.mavice.com\/blog\/wp-content\/uploads\/2021\/03\/Screen-Shot-2021-03-29-at-11.18.55-PM-768x354.png 768w, https:\/\/www.mavice.com\/blog\/wp-content\/uploads\/2021\/03\/Screen-Shot-2021-03-29-at-11.18.55-PM-1536x708.png 1536w, https:\/\/www.mavice.com\/blog\/wp-content\/uploads\/2021\/03\/Screen-Shot-2021-03-29-at-11.18.55-PM-2048x944.png 2048w, https:\/\/www.mavice.com\/blog\/wp-content\/uploads\/2021\/03\/Screen-Shot-2021-03-29-at-11.18.55-PM-360x166.png 360w, https:\/\/www.mavice.com\/blog\/wp-content\/uploads\/2021\/03\/Screen-Shot-2021-03-29-at-11.18.55-PM-1040x480.png 1040w, https:\/\/www.mavice.com\/blog\/wp-content\/uploads\/2021\/03\/Screen-Shot-2021-03-29-at-11.18.55-PM-640x295.png 640w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>4. Add an additional&nbsp;<strong>Text<\/strong>&nbsp;component to the page.<\/p>\n\n\n\n<p>Notice that the authoring experience is similar to that of a traditional AEM Sites page. Currently a limited number of components are available to be used. More will be added over the course of the tutorial.<\/p>\n\n\n\n<h2 id=\"inspect-the-single-page-application\">Inspect the Single Page Application<\/h2>\n\n\n\n<p>Next, verify that this is a Single Page Application with the use of your browser\u2019s developer tools.In the&nbsp;<strong>Page Editor<\/strong>, click the&nbsp;<strong>Page Information<\/strong>&nbsp;button &gt;&nbsp;<strong>View as Published<\/strong>.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" src=\"https:\/\/www.mavice.com\/blog\/wp-content\/uploads\/2021\/03\/Screen-Shot-2021-03-29-at-11.21.00-PM-2-1024x787.png\" alt=\"\" class=\"wp-image-495\" width=\"664\" height=\"509\" srcset=\"https:\/\/www.mavice.com\/blog\/wp-content\/uploads\/2021\/03\/Screen-Shot-2021-03-29-at-11.21.00-PM-2-1024x787.png 1024w, https:\/\/www.mavice.com\/blog\/wp-content\/uploads\/2021\/03\/Screen-Shot-2021-03-29-at-11.21.00-PM-2-300x231.png 300w, https:\/\/www.mavice.com\/blog\/wp-content\/uploads\/2021\/03\/Screen-Shot-2021-03-29-at-11.21.00-PM-2-768x590.png 768w, https:\/\/www.mavice.com\/blog\/wp-content\/uploads\/2021\/03\/Screen-Shot-2021-03-29-at-11.21.00-PM-2-1536x1180.png 1536w, https:\/\/www.mavice.com\/blog\/wp-content\/uploads\/2021\/03\/Screen-Shot-2021-03-29-at-11.21.00-PM-2-360x277.png 360w, https:\/\/www.mavice.com\/blog\/wp-content\/uploads\/2021\/03\/Screen-Shot-2021-03-29-at-11.21.00-PM-2-1040x799.png 1040w, https:\/\/www.mavice.com\/blog\/wp-content\/uploads\/2021\/03\/Screen-Shot-2021-03-29-at-11.21.00-PM-2-640x492.png 640w, https:\/\/www.mavice.com\/blog\/wp-content\/uploads\/2021\/03\/Screen-Shot-2021-03-29-at-11.21.00-PM-2.png 1554w\" sizes=\"(max-width: 664px) 100vw, 664px\" \/><\/figure>\n\n\n\n<p>This will open a new tab with the query parameter&nbsp;<code>?wcmmode=disabled<\/code>&nbsp;which effectively turns off the AEM editor:&nbsp;<a href=\"http:\/\/localhost:4502\/content\/wknd-spa-vue\/us\/en\/home.html?wcmmode=disabled\">http:\/\/localhost:4502\/content\/wknd-spa-vue\/us\/en\/home.html?wcmmode=disabled<\/a><\/p>\n\n\n\n<p>View the page\u2019s source and notice that the text content&nbsp;<strong>Hello World<\/strong>&nbsp;or any of the other content is not found. Instead you should see HTML like the following:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">...\n&lt;body&gt;\n    &lt;noscript&gt;You need to enable JavaScript to run this app.&lt;\/noscript&gt;\n    &lt;div id=\"spa-root\"&gt;&lt;\/div&gt;\n    &lt;script type=\"text\/javascript\" src=\"\/etc.clientlibs\/wknd-spa-vue\/clientlibs\/clientlib-vue.min.js\"&gt;&lt;\/script&gt;\n&lt;\/body&gt;\n...\n<\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<p><code>clientlib-vue.min.js<\/code>&nbsp;is the Vue SPA that is loaded onto the page and responsible for rendering the content.<\/p>\n\n\n\n<p>However,&nbsp;<em>where does the content come from?<\/em><\/p>\n\n\n\n<ol><li>Return to the tab:&nbsp;<a href=\"http:\/\/localhost:4502\/content\/wknd-spa-vue\/us\/en\/home.html?wcmmode=disabled\">http:\/\/localhost:4502\/content\/wknd-spa-vue\/us\/en\/home.html?wcmmode=disabled<\/a><br><\/li><li>Open the browser\u2019s developer tools and inspect the network traffic of the page during a refresh. View the&nbsp;<strong>XHR<\/strong>&nbsp;requests:<\/li><li><\/li><\/ol>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" width=\"1024\" height=\"488\" src=\"https:\/\/www.mavice.com\/blog\/wp-content\/uploads\/2021\/03\/Screen-Shot-2021-03-29-at-11.25.16-PM-1-1024x488.png\" alt=\"\" class=\"wp-image-497\" srcset=\"https:\/\/www.mavice.com\/blog\/wp-content\/uploads\/2021\/03\/Screen-Shot-2021-03-29-at-11.25.16-PM-1-1024x488.png 1024w, https:\/\/www.mavice.com\/blog\/wp-content\/uploads\/2021\/03\/Screen-Shot-2021-03-29-at-11.25.16-PM-1-300x143.png 300w, https:\/\/www.mavice.com\/blog\/wp-content\/uploads\/2021\/03\/Screen-Shot-2021-03-29-at-11.25.16-PM-1-768x366.png 768w, https:\/\/www.mavice.com\/blog\/wp-content\/uploads\/2021\/03\/Screen-Shot-2021-03-29-at-11.25.16-PM-1-1536x733.png 1536w, https:\/\/www.mavice.com\/blog\/wp-content\/uploads\/2021\/03\/Screen-Shot-2021-03-29-at-11.25.16-PM-1-2048x977.png 2048w, https:\/\/www.mavice.com\/blog\/wp-content\/uploads\/2021\/03\/Screen-Shot-2021-03-29-at-11.25.16-PM-1-360x172.png 360w, https:\/\/www.mavice.com\/blog\/wp-content\/uploads\/2021\/03\/Screen-Shot-2021-03-29-at-11.25.16-PM-1-1040x496.png 1040w, https:\/\/www.mavice.com\/blog\/wp-content\/uploads\/2021\/03\/Screen-Shot-2021-03-29-at-11.25.16-PM-1-640x305.png 640w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>There should be a request to&nbsp;<a href=\"http:\/\/localhost:4502\/content\/wknd-spa-vue\/us\/en.model.json\">http:\/\/localhost:4502\/content\/wknd-spa-vue\/us\/en.model.json<\/a>. This contains all of the content, formatted in JSON, that will drive the SPA.<\/p>\n\n\n\n<p>In a new tab open&nbsp;<a href=\"http:\/\/localhost:4502\/content\/wknd-spa-vue\/us\/en.model.json\">http:\/\/localhost:4502\/content\/wknd-spa-vue\/us\/en.model.json<\/a><\/p>\n\n\n\n<p>The request&nbsp;<code>en.model.json<\/code>&nbsp;represents the content model that will drive the application. Inspect the JSON output and you should be able to find the snippet representing the&nbsp;<strong>Text<\/strong>&nbsp;component(s).<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">...\n\":items\": {\n    \"text\": {\n        \"text\": \"&lt;p&gt;Hello World! Updated content!&lt;\/p&gt;\\r\\n\",\n        \"richText\": true,\n        \":type\": \"wknd-spa-vue\/components\/text\"\n    },\n    \"text_98796435\": {\n        \"text\": \"&lt;p&gt;A new text component.&lt;\/p&gt;\\r\\n\",\n        \"richText\": true,\n        \":type\": \"wknd-spa-vue\/components\/text\"\n    },\n}\n...\n<\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<p>In the next chapter we will inspect how this JSON content is mapped from AEM Components to SPA Components to form the basis of the AEM SPA Editor experience.<\/p>\n\n\n\n<h2 id=\"congratulations\">Congratulations!<\/h2>\n\n\n\n<p>Congratulations, you have just created your first AEM SPA Editor Project!<\/p>\n\n\n\n<p>The SPA is quite simple. In the next few chapters more functionality will be added.<\/p>\n\n\n\n<h3 id=\"next-steps\">Next Steps<\/h3>\n\n\n\n<p>Integrate the SPA&nbsp;&#8211; Learn how the SPA source code is integrated with the AEM Project and understand tools available to rapidly develop the SPA.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>*This article was modeled from the current Adobe React SPA documentation. Learn how to use an Adobe Experience Manager (AEM) Maven project as a starting point for a Vue application integrated with the AEM SPA Editor. Objective Understand the structure of a new AEM SPA Editor project built from a&#8230;<\/p>\n","protected":false},"author":2,"featured_media":558,"comment_status":"open","ping_status":"","sticky":false,"template":"","format":"standard","meta":[],"categories":[1,36],"tags":[],"_links":{"self":[{"href":"https:\/\/www.mavice.com\/blog\/wp-json\/wp\/v2\/posts\/489"}],"collection":[{"href":"https:\/\/www.mavice.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.mavice.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.mavice.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.mavice.com\/blog\/wp-json\/wp\/v2\/comments?post=489"}],"version-history":[{"count":8,"href":"https:\/\/www.mavice.com\/blog\/wp-json\/wp\/v2\/posts\/489\/revisions"}],"predecessor-version":[{"id":563,"href":"https:\/\/www.mavice.com\/blog\/wp-json\/wp\/v2\/posts\/489\/revisions\/563"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mavice.com\/blog\/wp-json\/wp\/v2\/media\/558"}],"wp:attachment":[{"href":"https:\/\/www.mavice.com\/blog\/wp-json\/wp\/v2\/media?parent=489"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.mavice.com\/blog\/wp-json\/wp\/v2\/categories?post=489"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.mavice.com\/blog\/wp-json\/wp\/v2\/tags?post=489"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}