100% found this document useful (2 votes)
77 views

Pro Vue.js 2 1st Edition Adam Freeman instant download

The document provides information about the book 'Pro Vue.js 2' by Adam Freeman, including details on its content, structure, and various chapters that cover topics from getting started with Vue.js to advanced features. It also includes links to download the book and related titles by the same author. The book is published by Apress Media LLC and is available in both print and electronic formats.

Uploaded by

szaroswade4y
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
100% found this document useful (2 votes)
77 views

Pro Vue.js 2 1st Edition Adam Freeman instant download

The document provides information about the book 'Pro Vue.js 2' by Adam Freeman, including details on its content, structure, and various chapters that cover topics from getting started with Vue.js to advanced features. It also includes links to download the book and related titles by the same author. The book is published by Apress Media LLC and is available in both print and electronic formats.

Uploaded by

szaroswade4y
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 54

Pro Vue.

js 2 1st Edition Adam Freeman pdf


download

https://textbookfull.com/product/pro-vue-js-2-1st-edition-adam-
freeman/

Download more ebook from https://textbookfull.com


We believe these products will be a great fit for you. Click
the link to download now, or visit textbookfull.com
to discover even more!

Pro React 16 1st Edition Adam Freeman

https://textbookfull.com/product/pro-react-16-1st-edition-adam-
freeman/

Pro Entity Framework Core 2 for ASP.NET Core MVC Adam


Freeman

https://textbookfull.com/product/pro-entity-framework-core-2-for-
asp-net-core-mvc-adam-freeman/

Pro Angular 6 3rd Edition Adam Freeman

https://textbookfull.com/product/pro-angular-6-3rd-edition-adam-
freeman/

Pro Angular 16 6th Edition Adam Freeman

https://textbookfull.com/product/pro-angular-16-6th-edition-adam-
freeman/
Essential TypeScript: From Beginner to Pro 1st Edition
Adam Freeman

https://textbookfull.com/product/essential-typescript-from-
beginner-to-pro-1st-edition-adam-freeman/

Essential TypeScript 4 From Beginner to Pro 2nd Edition


Adam Freeman

https://textbookfull.com/product/essential-typescript-4-from-
beginner-to-pro-2nd-edition-adam-freeman/

Essential TypeScript 4 From Beginner to Pro Second


Edition Adam Freeman

https://textbookfull.com/product/essential-typescript-4-from-
beginner-to-pro-second-edition-adam-freeman/

Pro Angular 9: Build Powerful and Dynamic Web Apps Adam


Freeman

https://textbookfull.com/product/pro-angular-9-build-powerful-
and-dynamic-web-apps-adam-freeman/

Pro ASP.NET Core MVC 2: Develop cloud-ready web


applications using Microsoft’s latest framework,
ASP.NET Core MVC 2 — Seventh Edition Adam Freeman

https://textbookfull.com/product/pro-asp-net-core-mvc-2-develop-
cloud-ready-web-applications-using-microsofts-latest-framework-
asp-net-core-mvc-2-seventh-edition-adam-freeman/
Pro
Vue.js 2

Adam Freeman
Pro Vue.js 2

Adam Freeman
Pro Vue.js 2
Adam Freeman
London, UK
ISBN-13 (pbk): 978-1-4842-3804-2 ISBN-13 (electronic): 978-1-4842-3805-9
https://doi.org/10.1007/978-1-4842-3805-9
Library of Congress Control Number: 2018956735
Copyright © 2018 by Adam Freeman
This work is subject to copyright. All rights are reserved by the Publisher, whether the whole or part of the
material is concerned, specifically the rights of translation, reprinting, reuse of illustrations, recitation,
broadcasting, reproduction on microfilms or in any other physical way, and transmission or information storage
and retrieval, electronic adaptation, computer software, or by similar or dissimilar methodology now known or
hereafter developed.
Trademarked names, logos, and images may appear in this book. Rather than use a trademark symbol with
every occurrence of a trademarked name, logo, or image we use the names, logos, and images only in an
editorial fashion and to the benefit of the trademark owner, with no intention of infringement of the trademark.
The use in this publication of trade names, trademarks, service marks, and similar terms, even if they are
not identified as such, is not to be taken as an expression of opinion as to whether or not they are subject to
proprietary rights.
While the advice and information in this book are believed to be true and accurate at the date of publication,
neither the authors nor the editors nor the publisher can accept any legal responsibility for any errors or
omissions that may be made. The publisher makes no warranty, express or implied, with respect to the material
contained herein.
Managing Director, Apress Media LLC: Welmoed Spahr
Acquisitions Editor: Joan Murray
Development Editor: Laura Berendson
Coordinating Editor: Mark Powers
Cover designed by eStudioCalamar
Cover image designed by Freepik (www.freepik.com)
Distributed to the book trade worldwide by Springer Science+Business Media New York,
233 Spring Street, 6th Floor, New York, NY 10013. Phone 1-800-SPRINGER, fax (201) 348-4505, e-mail
orders-ny@springer-sbm.com, or visit www.springeronline.com. Apress Media, LLC is a California LLC
and the sole member (owner) is Springer Science + Business Media Finance Inc (SSBM Finance Inc).
SSBM Finance Inc is a Delaware corporation.
For information on translations, please e-mail editorial@apress.com; for reprint, paperback, or audio rights,
please email bookpermissions@springernature.com.
Apress titles may be purchased in bulk for academic, corporate, or promotional use. eBook versions and
licenses are also available for most titles. For more information, reference our Print and eBook Bulk Sales web
page at www.apress.com/bulk-sales.
Any source code or other supplementary material referenced by the author in this book is available to readers
on GitHub via the book’s product page, located at www.apress.com/9781484238042. For more detailed
information, please visit www.apress.com/source-code.
Printed on acid-free paper
Dedicated to my lovely wife, Jacqui Griffyth.
(And also to Peanut.)
Table of Contents

About the Author ....................................................................................................xxi


About the Technical Reviewer ..............................................................................xxiii

■Part I: Getting Started with Vue.js ...................................................... 1


■Chapter 1: Your First Vue.js Application ................................................................ 3
Preparing the Development Environment......................................................................... 3
Installing Node.js .................................................................................................................................... 3
Installing the @vue/cli Package ............................................................................................................. 4
Installing Git............................................................................................................................................ 5
Installing an Editor .................................................................................................................................. 5
Installing a Browser ................................................................................................................................ 6

Creating the Project.......................................................................................................... 6


Understanding the Project Structure ...................................................................................................... 6
Starting the Development Tools .............................................................................................................. 8

Replacing the Placeholder Content .................................................................................. 9


Adding a CSS Framework ..................................................................................................................... 11
Styling the HTML Elements................................................................................................................... 12

Adding Dynamic Content ................................................................................................ 13


Displaying the List of Tasks .................................................................................................................. 14
Adding a Checkbox ............................................................................................................................... 16
Filtering Completed Tasks .................................................................................................................... 19
Creating New Tasks .............................................................................................................................. 21
Storing Data Persistently ...................................................................................................................... 23
Adding the Finishing Touches ............................................................................................................... 25

Summary ........................................................................................................................ 28
v
■ TABLE OF CONTENTS

■Chapter 2: Understanding Vue.js ......................................................................... 29


Should I Use Vue.js? ....................................................................................................... 29
Understanding Round-Trip Applications ............................................................................................... 30
Understanding Single-Page Applications ............................................................................................. 30
Understanding Application Complexity ................................................................................................. 31

What Do I Need to Know? ............................................................................................... 32


How Do I Set Up My Development Environment? ........................................................... 32
What Is the Structure of This Book? ............................................................................... 32
Part 1: Getting Started with Vue.js ........................................................................................................ 32
Part 2: Working with Vue.js ................................................................................................................... 32
Part 3: Advanced Vue.js Features.......................................................................................................... 33

Are There Lots of Examples? .......................................................................................... 33


Where Can You Get the Example Code? ......................................................................... 35
Where Can You Get Corrections for This Book? .............................................................. 35
How Can You Contact Me? ............................................................................................. 35
Summary ........................................................................................................................ 36
■Chapter 3: HTML and CSS Primer ........................................................................ 37
Preparing for This Chapter ............................................................................................. 37
Understanding HTML Elements ...................................................................................... 40
Understanding Element Content ........................................................................................................... 41
Understanding Attributes ...................................................................................................................... 42

Examining the Live HTML Document.............................................................................. 44


Understanding Bootstrap................................................................................................ 45
Applying Basic Bootstrap Classes ........................................................................................................ 46
Using Bootstrap to Create Grids ........................................................................................................... 47
Using Bootstrap to Style Tables ............................................................................................................ 48
Using Bootstrap to Style Forms ............................................................................................................ 50

Summary ........................................................................................................................ 51

vi
■ TABLE OF CONTENTS

■Chapter 4: Essential JavaScript Primer............................................................... 53


Preparing for This Chapter ............................................................................................. 54
Using Statements ........................................................................................................... 56
Defining and Using Functions......................................................................................... 57
Defining Functions with Parameters .................................................................................................... 58
Defining Functions That Return Results ............................................................................................... 60
Using Functions as Arguments to Other Functions............................................................................... 61

Using Variables and Types .............................................................................................. 62


Using the Primitive Types ..................................................................................................................... 64

Using JavaScript Operators ............................................................................................ 66


Using Conditional Statements .............................................................................................................. 67
The Equality Operator vs. the Identity Operator .................................................................................... 68
Explicitly Converting Types ................................................................................................................... 69

Working with Arrays ....................................................................................................... 71


Using an Array Literal ........................................................................................................................... 71
Reading and Modifying the Contents of an Array ................................................................................. 71
Enumerating the Contents of an Array.................................................................................................. 72
Using the Spread Operator ................................................................................................................... 73
Using the Built-in Array Methods .......................................................................................................... 74

Working with Objects ..................................................................................................... 75


Using Object Literals............................................................................................................................. 76
Using Functions as Methods................................................................................................................. 77
Copying Properties from One Object to Another ................................................................................... 78

Understanding JavaScript Modules................................................................................ 78


Creating and Using a Simple JavaScript Module .................................................................................. 79
Defining Multiple Features in a Module ................................................................................................ 81
Combining Multiple Files in a Module .................................................................................................. 83

vii
■ TABLE OF CONTENTS

Understanding JavaScript Promises .............................................................................. 84


Understanding the Asynchronous Operation Problem .......................................................................... 84
Using a JavaScript Promise .................................................................................................................. 85
Simplifying the Asynchronous Code ..................................................................................................... 86

Summary ........................................................................................................................ 87
■Chapter 5: SportsStore: A Real Application ......................................................... 89
Creating the SportsStore Project .................................................................................... 89
Adding Additional Packages ................................................................................................................. 90
Preparing the RESTful Web Service ...................................................................................................... 92
Starting the Project Tools...................................................................................................................... 95

Creating the Data Store .................................................................................................. 96


Creating the Product Store ............................................................................................. 98
Creating the Product List .................................................................................................................... 100
Adding the Product List to the Application ......................................................................................... 101
Filtering the Price Data ....................................................................................................................... 103
Adding Product Pagination ................................................................................................................. 104
Adding Category Selection ................................................................................................................. 112

Using the RESTful Web Service .................................................................................... 115


Summary ...................................................................................................................... 118
■Chapter 6: SportsStore: Checkout and Orders ................................................... 119
Preparing for This Chapter ........................................................................................... 119
Creating the Shopping Cart Placeholder ...................................................................... 120
Configuring URL Routing .............................................................................................. 121
Displaying a Routed Component......................................................................................................... 122

Implementing the Cart Features ................................................................................... 123


Adding a Module to the Data Store ..................................................................................................... 123
Adding the Product Selection Feature ................................................................................................ 125
Displaying the Cart Contents .............................................................................................................. 127
Creating a Global Filter ....................................................................................................................... 131
Testing the Basic Cart Features .......................................................................................................... 132

viii
■ TABLE OF CONTENTS

Making the Cart Persistent ................................................................................................................. 132


Adding the Cart Summary Widget ...................................................................................................... 136

Adding the Checkout and Orders Features................................................................... 138


Creating and Registering the Checkout Components ......................................................................... 139
Adding Form Validation....................................................................................................................... 143
Adding the Remaining Fields and Validation ...................................................................................... 147

Summary ...................................................................................................................... 150


■Chapter 7: SportsStore: Scaling and Administration ......................................... 151
Preparing for This Chapter ........................................................................................... 151
Dealing with Larger Amounts of Data........................................................................... 153
Improving Page Navigation ................................................................................................................. 153
Reducing the Amount of Data Requested by the Application ............................................................. 155
Adding Search Support ....................................................................................................................... 161

Starting the Administration Features ........................................................................... 166


Implementing Authentication.............................................................................................................. 166
Adding the Administration Component Structure ............................................................................... 173
Implementing the Order Administration Feature ................................................................................ 175

Summary ...................................................................................................................... 178


■Chapter 8: SportsStore: Administration and Deployment .................................. 179
Preparing for This Chapter ........................................................................................... 179
Adding the Product Administration Features................................................................ 180
Presenting the Product List ................................................................................................................ 182
Adding the Editor Placeholder and URL Routes .................................................................................. 183
Implementing the Editor Feature ........................................................................................................ 185

Deploying SportsStore.................................................................................................. 189


Preparing the Application for Deployment .......................................................................................... 189
Building the Application for Deployment ............................................................................................ 194
Testing the Deployment-Ready Application ........................................................................................ 195
Deploying the Application ................................................................................................................... 197

Summary ...................................................................................................................... 200

ix
■ TABLE OF CONTENTS

■Part II: Vue.js in Detail .................................................................... 201


■Chapter 9: Understanding Vue.js ....................................................................... 203
Preparing for This Chapter ........................................................................................... 203
Adding the Bootstrap CSS Framework ............................................................................................... 204
Running the Example Application ....................................................................................................... 205

Creating an Application Using the DOM API.................................................................. 205


Understanding How the DOM API Application Works .......................................................................... 207

Creating a Vue Object ................................................................................................... 208


Adding Data to the Vue Object ............................................................................................................ 210
Adding an Event Handler .................................................................................................................... 211
Correcting the Message...................................................................................................................... 212
Understanding the Vue Object Structure ............................................................................................ 214

Introducing a Component ............................................................................................. 214


Registering and Applying the Component .......................................................................................... 216
Separating the Template from the JavaScript Code ........................................................................... 218

Summary ...................................................................................................................... 220


■Chapter 10: Understanding Vue.js Projects and Tools ....................................... 221
Creating a Vue.js Development Project ........................................................................ 222
Configuring the Linter ......................................................................................................................... 225
Completing the Project Configuration ................................................................................................. 226

Understanding the Project Structure ............................................................................ 227


Understanding the Source Code Folder .............................................................................................. 228
Understanding the Packages Folder ................................................................................................... 229

Using the Development Tools ....................................................................................... 233


Understanding the Compilation and Transformation Process............................................................. 234
Understanding the Development HTTP Server ................................................................................... 236
Understanding Hot Model Replacement ............................................................................................. 237
Understanding the Error Display......................................................................................................... 240

Using the Linter ............................................................................................................ 242


Customizing the Linter Rules .............................................................................................................. 245

x
■ TABLE OF CONTENTS

Debugging the Application ........................................................................................... 247


Exploring the Application State........................................................................................................... 247
Using the Browser Debugger .............................................................................................................. 248

Configuring the Development Tools .............................................................................. 250


Building the Application for Deployment ...................................................................... 250
Installing and Using an HTTP Server .................................................................................................. 253

Summary ...................................................................................................................... 254


■Chapter 11: Understanding Data Bindings ........................................................ 255
Preparing for This Chapter ........................................................................................... 256
Understanding the Elements of a Component .............................................................. 258
Understanding the Template Element ................................................................................................. 259
Understanding the Script Element ...................................................................................................... 259
Understanding the Style Element ....................................................................................................... 259

Resetting the Component in the Example Application ................................................. 260


Displaying a Data Value ................................................................................................ 261
Using More Complex Expressions in a Data Binding .......................................................................... 264
Calculating Values with Computed Properties .................................................................................... 267
Calculating Data Values with a Method .............................................................................................. 270
Formatting Data Values with Filters ................................................................................................... 273

Summary ...................................................................................................................... 279


■Chapter 12: Using the Basic Directives ............................................................. 281
Preparing for This Chapter ........................................................................................... 282
Setting an Element’s Text Content................................................................................ 284
Displaying Raw HTML................................................................................................... 285
Selectively Displaying Elements................................................................................... 287
Selectively Displaying Adjacent Peer Elements .................................................................................. 289
Choosing Between Sections of Content.............................................................................................. 291
Selectively Displaying Elements Using CSS ....................................................................................... 293

Setting an Element’s Attributes and Properties............................................................ 296


Using an Object to Configure Classes ................................................................................................. 298

xi
■ TABLE OF CONTENTS

Setting Individual Styles ..................................................................................................................... 301


Setting Other Attributes ...................................................................................................................... 302
Setting Multiple Attributes .................................................................................................................. 303
Setting an HTMLElement Property...................................................................................................... 305

Summary ...................................................................................................................... 307


■Chapter 13: Using the Repeater Directive.......................................................... 309
Preparing for This Chapter ........................................................................................... 310
Enumerating an Array................................................................................................... 311
Using the Alias .................................................................................................................................... 314
Identifying the Key .............................................................................................................................. 316
Getting the Item Index ........................................................................................................................ 319
Understanding Array Change Detection .............................................................................................. 322

Enumerating Object Properties .................................................................................... 325


Understanding Object Property Ordering ............................................................................................ 327

Repeating HTML Elements Without a Data Source ....................................................... 329


Using Computed Properties with the v-for Directive .................................................... 330
Paging Data ........................................................................................................................................ 330
Filtering and Sorting Data................................................................................................................... 332

Summary ...................................................................................................................... 335


■Chapter 14: Handling Events ............................................................................. 337
Preparing for This Chapter ........................................................................................... 338
Handling Events ........................................................................................................... 339
Understanding Events and Event Objects..................................................................... 340
Using a Method to Handle Events ................................................................................ 342
Combining Events, Methods, and Repeated Elements ................................................. 345
Listening for Multiple Events from the Same Element ................................................. 346
Using Event Handling Modifiers ................................................................................... 350
Managing Event Propagation.............................................................................................................. 350
Preventing Duplicate Events ............................................................................................................... 357

xii
■ TABLE OF CONTENTS

Using Mouse Event Modifiers ....................................................................................... 358


Using Keyboard Event Modifiers .................................................................................. 359
Summary ...................................................................................................................... 362
■Chapter 15: Working with Form Elements ......................................................... 363
Preparing for This Chapter ........................................................................................... 364
Creating Two-Way Model Bindings ............................................................................... 366
Adding a Two-Way Binding ................................................................................................................. 367
Adding Another Input Element ............................................................................................................ 368
Simplifying Two-Way Bindings ........................................................................................................... 370

Binding to Form Elements ............................................................................................ 372


Binding to Text Fields.......................................................................................................................... 372
Binding to Radio Buttons and Checkboxes ......................................................................................... 373
Binding to Select Elements................................................................................................................. 376

Using the v-model Modifiers ........................................................................................ 377


Formatting Values as Numbers........................................................................................................... 377
Delaying Updates ................................................................................................................................ 379
Removing Whitespace Characters ...................................................................................................... 380

Binding to Different Data Types .................................................................................... 381


Selecting an Array of Items ................................................................................................................ 381
Using Custom Values for Form Elements............................................................................................ 383

Validating Form Data .................................................................................................... 387


Defining the Validation Rules .............................................................................................................. 389
Performing Validation ......................................................................................................................... 391
Responding to Live Changes .............................................................................................................. 394

Summary ...................................................................................................................... 396


■Chapter 16: Using Components ......................................................................... 397
Preparing for This Chapter ........................................................................................... 398
Understanding Components as Building Blocks........................................................... 399
Understanding Child Component Names and Elements ..................................................................... 402
Using Component Features in Child Components............................................................................... 404

xiii
■ TABLE OF CONTENTS

Understanding Component Isolation ............................................................................ 405


Using Component Props ..................................................................................................................... 407
Creating Custom Events ..................................................................................................................... 414
Using Component Slots ...................................................................................................................... 417

Summary ...................................................................................................................... 424

■Part III: Advanced Vue.js Features.................................................. 425


■Chapter 17: Understanding the Component Lifecycle ....................................... 427
Preparing for This Chapter ........................................................................................... 428
Understanding the Component Lifecycle...................................................................... 431
Understanding the Creation Phase ..................................................................................................... 431
Understanding the Mounting Phase ................................................................................................... 433
Understanding Update Phase ............................................................................................................. 436
Understanding the Destruction Phase ................................................................................................ 443

Handling Component Errors ......................................................................................... 446


Summary ...................................................................................................................... 449
■Chapter 18: Loosely Coupled Components ........................................................ 451
Preparing for This Chapter ........................................................................................... 452
Creating the Product Display Component ........................................................................................... 454
Creating the Product Editor Component ............................................................................................. 455
Displaying the Child Components ....................................................................................................... 457

Understanding Dependency Injection........................................................................... 459


Defining a Service .............................................................................................................................. 459
Consuming a Service via Dependency Injection ................................................................................. 460
Overriding Antecedent Services ......................................................................................................... 461
Creating Reactive Services ................................................................................................................. 463
Using Advanced Dependency Injection Features ................................................................................ 466

Using an Event Bus ...................................................................................................... 469


Sending Events Using an Event Bus ................................................................................................... 470

xiv
■ TABLE OF CONTENTS

Receiving Events from the Event Bus ................................................................................................. 471


Creating Local Event Buses ................................................................................................................ 474

Summary ...................................................................................................................... 477


■Chapter 19: Using RESTful Web Services .......................................................... 479
Preparing for This Chapter ........................................................................................... 480
Preparing the HTTP Server ................................................................................................................. 480
Preparing the Example Application..................................................................................................... 481
Running the Example Application and HTTP Server ........................................................................... 484

Understanding RESTful Web Services .......................................................................... 486


Consuming a RESTful Web Service .............................................................................. 488
Handling the Response Data .............................................................................................................. 489
Making the HTTP Request .................................................................................................................. 489
Receiving the Response ..................................................................................................................... 491
Processing the Data............................................................................................................................ 492

Creating an HTTP Service ............................................................................................. 494


Consuming the HTTP Service ............................................................................................................. 495
Adding Other HTTP Operations ........................................................................................................... 496
Creating an Error Handling Service .................................................................................................... 499

Summary ...................................................................................................................... 504


■Chapter 20: Using a Data Store ......................................................................... 505
Preparing for This Chapter ........................................................................................... 506
Creating and Using a Data Store .................................................................................. 509
Understanding Separate State and Mutations .................................................................................... 511
Providing Access to the Vuex Data Store ............................................................................................ 512
Using the Data Store ........................................................................................................................... 513
Inspecting Data Store Changes .......................................................................................................... 516

Defining Computed Properties in the Data Store.......................................................... 518


Using a Getter in a Component ........................................................................................................... 520
Providing Arguments to Getters .......................................................................................................... 521

xv
■ TABLE OF CONTENTS

Performing Asynchronous Operations .......................................................................... 522


Receiving Change Notifications.................................................................................... 525
Mapping Data Store Features into Components........................................................... 530
Using Data Store Modules ............................................................................................ 533
Registering and Using a Data Store Module ....................................................................................... 534
Using Module Namespaces ................................................................................................................ 538

Summary ...................................................................................................................... 540


■Chapter 21: Dynamic Components .................................................................... 541
Preparing for This Chapter ........................................................................................... 542
Preparing Components for Dynamic Lifecycles............................................................ 543
Getting the Application Data ............................................................................................................... 543
Managing Watch Events ..................................................................................................................... 545

Displaying Components Dynamically ........................................................................... 546


Presenting Different Components in an HTML Element...................................................................... 546
Selecting Components Using a Data Binding ..................................................................................... 548
Automatically Navigating Around the Application ............................................................................... 552

Using Asynchronous Components ................................................................................ 557


Disabling Prefetch Hints ..................................................................................................................... 560
Configuring Lazy Loading ................................................................................................................... 561

Summary ...................................................................................................................... 564


■Chapter 22: URL Routing.................................................................................... 565
Preparing for This Chapter ........................................................................................... 566
Getting Started with URL Routing................................................................................. 567
Providing Access to the Routing Configuration................................................................................... 569
Using the Routing System to Display Components............................................................................. 570
Navigating to Different URLs .............................................................................................................. 572

Understanding and Configuring URL Route Matching .................................................. 577


Understanding URL Matching and Formatting.................................................................................... 578
Using the HTML5 History API for Routing ........................................................................................... 578
Using a Route Alias ............................................................................................................................. 582

xvi
■ TABLE OF CONTENTS

Getting Routing Data in Components.................................................................................................. 583


Matching Routes Dynamically ............................................................................................................ 587
Using Regular Expressions to Match URLs ......................................................................................... 591
Creating Named Routes ...................................................................................................................... 594

Dealing with Navigation Changes................................................................................. 597


Summary ...................................................................................................................... 601
■Chapter 23: URL Routing Element Features ....................................................... 603
Preparing for This Chapter ........................................................................................... 604
Working with Router-Link Elements ............................................................................. 606
Selecting the Element Type ................................................................................................................ 608
Selecting the Navigation Event ........................................................................................................... 610
Styling Router Link Elements ............................................................................................................. 611

Creating Nested Routes................................................................................................ 617


Planning the Application Layout ......................................................................................................... 617
Adding Components to the Project ..................................................................................................... 617
Defining the Routes ............................................................................................................................ 619
Creating the Navigation Elements ...................................................................................................... 621
Testing the Nested Routes .................................................................................................................. 622

Using Named Router-View Elements............................................................................ 624


Summary ...................................................................................................................... 628
■Chapter 24: Advanced URL Routing ................................................................... 629
Preparing for This Chapter ........................................................................................... 629
Using Separate Files for Related Routes ...................................................................... 630
Guarding Routes ........................................................................................................... 632
Defining Global Navigation Guards ..................................................................................................... 632
Defining Route-Specific Guards.......................................................................................................... 637
Defining Component Route Guards..................................................................................................... 640

Loading Components on Demand ................................................................................ 648


Displaying a Component Loading Message ........................................................................................ 649

xvii
■ TABLE OF CONTENTS

Creating Routing-Free Components ............................................................................. 654


Summary ...................................................................................................................... 656
■Chapter 25: Transitions ..................................................................................... 657
Preparing for This Chapter ........................................................................................... 658
Creating the Components ................................................................................................................... 659
Configuring URL Routing..................................................................................................................... 662
Creating the Navigation Elements ...................................................................................................... 663

Getting Started with Transitions ................................................................................... 665


Understanding the Transition Classes and CSS Transition.................................................................. 668
Understanding the Transition Sequence ............................................................................................. 670

Using an Animation Library .......................................................................................... 670


Switching Between Multiple Elements......................................................................... 672
Applying a Transition to URL Routed Elements ................................................................................... 675
Applying a Transition for an Element’s Appearance............................................................................ 676

Applying Transitions for Collection Changes ................................................................ 678


Using Transition Events ................................................................................................ 680
Using the Enter and Leave Events ...................................................................................................... 682

Drawing Attention to Other Changes ............................................................................ 683


Summary ...................................................................................................................... 686
■Chapter 26: Extending Vue.js............................................................................. 687
Preparing for This Chapter ........................................................................................... 688
Creating Custom Directives .......................................................................................... 690
Understanding How Directives Work .................................................................................................. 692
Using Custom Directive Expressions .................................................................................................. 695
Using Custom Directive Arguments .................................................................................................... 696
Using Custom Directive Modifiers ...................................................................................................... 698
Communicating Between Hook Functions .......................................................................................... 700
Defining Single Function Directives.................................................................................................... 701

xviii
■ TABLE OF CONTENTS

Creating Component Mixins ......................................................................................... 702


Creating a Vue.js Plugin ................................................................................................ 706
Creating the Plugin ............................................................................................................................. 709
Using a Plugin ..................................................................................................................................... 711

Summary ...................................................................................................................... 713

Index ..................................................................................................................... 715

xix
About the Author

Adam Freeman is an experienced IT professional who has held senior


positions in a range of companies, most recently serving as chief
technology officer and chief operating officer of a global bank. Now
retired, he spends his time writing and long-distance running.

xxi
About the Technical Reviewer

Fabio Claudio Ferracchiati is a senior consultant and a senior analyst/developer using Microsoft
technologies. He works for BluArancio (www.bluarancio.com). He is a Microsoft Certified Solution
Developer for .NET, a Microsoft Certified Application Developer for .NET, a Microsoft Certified Professional,
and a prolific author and technical reviewer. Over the past ten years, he’s written articles for Italian and
international magazines and coauthored more than ten books on a variety of computer topics.

xxiii
PART I

Getting Started with Vue.js


CHAPTER 1

Your First Vue.js Application

The best way to get started with Vue.js is to dive in. In this chapter, I take you through a simple development
process to create an application to keep track of to-do items. In Chapters 5–8, I show you how to create
a more complex and realistic application, but for now, a simple example will be enough to demonstrate
how Vue.js applications are created and how the basic features work. Don’t worry if you don’t understand
everything in this chapter—the idea is to get an overall sense of how Vue.js works, and I explain everything in
detail in later chapters.

■ Note If you want a conventional description of Vue.js features, then you can jump to Part 2 of this book,
where I start the process of describing individual features in depth.

Preparing the Development Environment


There is some preparation required for Vue.js development. In the sections that follow, I explain how to get
set up and ready to create your first project.

Installing Node.js
The tools used for Vue.js development rely on Node.js—also known as Node—which was created in 2009
as a simple and efficient runtime for server-side applications written in JavaScript. Node.js is based on the
JavaScript engine used in the Chrome browser and provides an API for executing JavaScript code outside of
the browser environment.
Node.js has enjoyed success as an application server, but for this book, it is interesting because it has
provided the foundation for a new generation of cross-platform development and build tools. Some smart
design decisions by the Node.js team and the cross-platform support provided by the Chrome JavaScript
runtime have created an opportunity that has been seized upon by enthusiastic tool writers. In short, Node.
js has become essential for web application development.
It is important that you download the same version of Node.js that I use throughout this book. Although
Node.js is relatively stable, there are still breaking API changes from time to time that may stop the examples
I include in the chapters from working.
The version I have used is 8.11.2, which is the current Long-Term Support release at the time of writing.
There may be a later version available by the time you read this, but you should stick to the 8.11.2 release
for the examples in this book. A complete set of 8.11.2 releases, with installers for Windows and macOS and
binary packages for other platforms, is available at https://nodejs.org/dist/v8.11.2.

© Adam Freeman 2018 3


A. Freeman, Pro Vue.js 2, https://doi.org/10.1007/978-1-4842-3805-9_1
CHAPTER 1 ■ YOUR FIRST VUE.JS APPLICATION

When you install Node.js, make sure you select the option to add the Node.js executables to the path.
When the installation is complete, run command shown in Listing 1-1.

Listing 1-1. Checking the Node Version

node -v

If the installation has gone as it should, then you will see the following version number displayed:

v8.11.2

The Node.js installer includes the Node Package Manager (NPM), which is used to manage the
packages in a project. Run the command shown in Listing 1-2 to ensure that NPM is working.

Listing 1-2. Checking That NPM Works

npm -v

If everything is working as it should, then you will see the following version number:

5.6.0

Installing the @vue/cli Package


The @vue/cli package is the standard way to create and manage Vue.js projects during development. You
don’t have to use this package, but it provides everything that is needed to get started with Vue.js, and I use it
throughout this book.

■ Note As I write this, the @vue/cli package has been released in beta. There may be small changes made
before the final release, but the core features should remain the same. For details of any breaking changes,
check the errata for this book, available at https://github.com/Apress/pro-vue-js-2.

To install @vue/cli, open a new command prompt and run the command shown in Listing 1-3. If you
are using Linux or macOS, you may need to use sudo.

Listing 1-3. Installing the Vue Tools Package

npm install --global @vue/cli

4
CHAPTER 1 ■ YOUR FIRST VUE.JS APPLICATION

Installing Git
The Git revision control tool is required to manage some of the packages required for Vue.js development.
If you are using Windows or macOS, then download and run the installer from https://git-scm.com/
downloads. (On macOS, you may have to change your security settings to open the installer, which has not
been signed by the developers.)
Git is already included in most Linux distributions. If you want to install the latest version, then consult
the installation instructions for your distribution at https://git-scm.com/download/linux. As an example,
for Ubuntu, which is the Linux distribution I use, I used the command shown in Listing 1-4.

Listing 1-4. Installing Git

sudo apt-get install git

Once you have completed the installation, open a new command prompt and run the command shown
in Listing 1-5 to check that Git is installed and available.

Listing 1-5. Checking Git

git --version

This command prints out the version of the Git package that has been installed. At the time of writing,
the latest version of Git for Windows and Linux is 2.17, and the latest version of Git for macOS is 2.16.3.

Installing an Editor
Vue.js development can be done with any programmer’s editor, from which there is an endless number to
choose. Some editors have enhanced support for working with Vue.js, including highlighting keywords and
expressions. If you don’t already have a preferred editor for web application development, then Table 1-1
describes some popular options for you to consider. I don’t rely on any specific editor for this book, and you
should use whichever editor you are comfortable working with.

Table 1-1. Popular Vue.js-Enabled Editors

Name Description
Sublime Text Sublime Text is a commercial cross-platform editor that has packages to support most
programming languages, frameworks, and platforms. See www.sublimetext.com for
details.
Atom Atom is a free, open source, cross-platform editor that has a particular emphasis on
customization and extensibility. See atom.io for details.
Brackets Brackets is a free open source editor developed by Adobe. See brackets.io for
details.
Visual Studio Code Visual Studio Code is a free, open source, cross-platform editor from Microsoft, with
an emphasis on extensibility. See code.visualstudio.com for details.
Visual Studio Visual Studio is Microsoft’s flagship developer tool. There are free and commercial
editions available, and it comes with a wide range of additional tools that integrate
into the Microsoft ecosystem.

5
CHAPTER 1 ■ YOUR FIRST VUE.JS APPLICATION

Installing a Browser
The final choice to make is the browser that you will use to check your work during development. All the
current-generation browsers have good developer support and work well with Vue.js, but there is a useful
extension for Chrome and Firefox called vue-devtools that provides insights into the state of a Vue.js
application and that is especially useful in complex projects. See https://github.com/vuejs/vue-devtools
for details of installing the extension, which I use in later chapters. I used Google Chrome throughout this
book, and this is the browser I recommend you use to follow the examples.

Creating the Project


Projects are created and managed from the command line. Open a new command prompt, navigate to a
convenient location, and run the command shown in Listing 1-6 to create the project for this chapter.

Listing 1-6. Creating the Project

vue create todo --default

The vue command was installed as part of the @vue/cli package in Listing 1-3, and the command in
Listing 1-6 creates a new project called todo, which will be created in a folder of the same name. The project
will be created, and all of the packages required for Vue.js development will be downloaded and installed,
which can take a while because a large number of packages are required even for a simple project.

Understanding the Project Structure


Open the todo folder using your preferred editor, and you will see the project structure shown in Figure 1-1.
The figure shows the layout in my preferred editor—Visual Studio—and you may see the project content
presented slightly differently if you have chosen a different editor.

6
CHAPTER 1 ■ YOUR FIRST VUE.JS APPLICATION

Figure 1-1. The project structure

The layout of the project can be daunting, but by the end of the book you will know what the different
files and folders are for and how they are used. In Table 1-2, I have briefly described the files that are
important in this chapter. I describe the structure of Vue.js projects in detail in Chapter 10.

Table 1-2. The Important Files in the Project

Name Description
public/index.html This is the HTML file that is loaded by the browser. It has an element in which
the application is displayed and a script element that loads the application
files.
src/main.js This is the JavaScript file that is responsible for configuring the Vue.js
application. It is also used to register any third-party packages that the
application relies on, which you will see demonstrated in later chapters.
src/App.vue This is the Vue.js component, which contains the HTML content that will be
displayed to the user, the JavaScript code required by the HTML, and the CSS
that styles the elements. Components are the main building blocks in a Vue.js
application, and you will see them used throughout this book.
src/assets/logo.png The assets folder is used to store static content, such as images. In a new
project, it contains a file called logo.png, which is an image of the Vue.js logo.

7
CHAPTER 1 ■ YOUR FIRST VUE.JS APPLICATION

Starting the Development Tools


When you create a project using the vue command, a complete set of development tools is installed so that
the project can be compiled, packaged up, and delivered to the browser. Using the command prompt, run
the commands shown in Listing 1-7 to navigate to the todo folder and start the development tools.

Listing 1-7. Starting the Development Tools

cd todo
npm run serve

There is an initial preparation process while the development tools start, which can take a moment to
complete. Don’t be put off by the amount of time the preparation takes because this process is required only
when you start a development session.
When the startup process is complete, you will see a message like this one, which confirms that the
application is running and tells you which HTTP port to connect to:

App running at:


- Local: http://localhost:8080/
- Network: http://192.168.0.77:8080/
Note that the development build is not optimized.
To create a production build, run npm run build.

The default port is 8080 although a different port will be selected if 8080 is not available. Open a new
browser window and navigate to http://localhost:8080 (or the URL specified if a different port has been
selected), and you will see the placeholder content shown in Figure 1-2. (The placeholder content changes
as new versions of the development tools are released, so don’t worry if you don’t see precisely the same
content.)

8
CHAPTER 1 ■ YOUR FIRST VUE.JS APPLICATION

Figure 1-2. Running the example application

Replacing the Placeholder Content


The key building block in a Vue.js application is called a component, which is defined in files with the
vue extension. Here is the content of the App component, which you will find in the App.vue file in the src
folder:

<template>
<div id="app">
<img src="./assets/logo.png">
<HelloWorld msg="Welcome to Your Vue.js App" />
</div>
</template>
<script>
import HelloWorld from './components/HelloWorld.vue'

export default {
name: 'app',
components: {
HelloWorld
}
}
</script>
<style>

9
Another Random Document on
Scribd Without Any Related Topics
pohottivat nokisina ja madonsyöminä, ja murenneen rappauksen alta
näkyivät välipintojen rimat. Eräässä kattopalkkeja kannattavista
olkakivistä oli vuosiluku 1463, arvattavasti rakennusvuosi. Kivinen
uuni, vaikkakin halkeillut ja murentunut, oli säilyttänyt yksinkertaisen
siroutensa solakoine pylväineen, kauluskivineen ja seppelkoristeisine
reunuksineen. Saattoipa reunuksella erottaa vielä ajankuluttaman
alkeellisen veistokuvankin, joka esitti pyhää Clarusta, korko-
ompelijain suojeluspyhää. Mutta uuni ei enää ollut käytännössä, sen
pesästä oli tehty avonainen kaappi, asettamalla siihen poikittain
lautoja hyllyiksi, joille oli kasattu mallipiirustuksia. Huonetta lämmitti
nyt jykevä valurautainen kamiini, jonka savutorvi, kuljettuaan pitkin
kattoa, lävisti uunin kyljen. Rempalleen menneet ovet olivat Ludvig
XIV:n ajalta. Lattiassa näkyi vielä vanhoja, lahonneita parkettilevyjä
uudempien välissä, jotka oli asetettu paikalleen yksitellen, kukin
koloonsa. Seinien keltainen maalaus oli jo sadan vuoden vanha,
ylhäältä haalistunut, alhaalta kulunut, täynnä salpietaritahroja. Joka
vuosi puhuttiin uudestaan-maalaamisesta, mutta vastenmielisyys
uudistuksia kohtaan pidätti sitä toteutumasta.

Istuessaan ompelukehyksen ääressä, johon messupaita oli


pingotettu,
Hubertine nosti päänsä ja sanoi:

— Muistat kai, että olen luvannut sinulle korin orvokkeja


puutarhaasi, jos saamme sen valmiiksi sunnuntaiksi.

Iloisena huudahti Angélique:

— Niin, sehän on totta!… Kyllä otan sen nyt käsiini!… Mutta missä
minun sormituppeni on? Kaikki kapineet lentävät tiehensä, kun ei tee
työtä.
Hän solautti norsunluisen sormitupen pikkusormensa toiseen
niveleeseen ja istuutui kehyksen toiselle puolelle, ikkunaa
vastapäätä.

Edellisen vuosisadan puolivälistä asti ei työhuoneen varustuksissa


ollut tapahtunut yhtään muutosta. Muodot muuttuivat, korko-
ompelutaide kehittyi, mutta täällä tavattiin vielä seinään kiinnitetty
puukappale, johon kehys nojautui, liikuteltavan pukin kannattaessa
sen toista päätä. Loukoissa nukkui vanhanaikaisia työkaluja:
»sukkela», eräs koje hammasrattaineen ja vartaineen, jolla pantiin
kultalankaa puolalta puikkoon koskematta siihen; käsirukki,
jonkinlainen seinään kiinnitettävä rataslaite, jolla kierrettiin lankaa;
kaikenkokoisia ompelukehyksiä niihin kuuluvine silkkivaatteineen ja
säleineen. Eräällä hyllyllä oli vanha kokoelma reikätalttoja
päärmäyskultaa varten; sillä näkyi myöskin hylyksi joutunut
entisaikaisten korko-ompelijain suuri, kuparinen kynttiläjalka.
Nahkaremmistä naulatun pitimen silmukoissa oli purasimia, puisia ja
rautaisia vasaroita, leikkuurautoja pergamentin leikkaamista varten
ja puksipuisia taltantapaisia esineitä, joilla lankoja muovailtiin sitä
mukaa kuin niitä käytettiin. Lehmuspuisen pöydän alla, jolla
pergamenttia leikattiin, oli isot kerinpuut, jonka liikkuvien
pajukelojen ympäri oli pingotettu vyyhti punaista villalankaa.
Lankaan pujoteltuja erivärisiä silkkipuolia riippui nuoralla lähellä
kaappia. Lattialla oli kori täynnä tyhjiä puolia. Käärelankakerä oli
pudonnut tuolilta alas ja purkautunut vieriessään.

— Oi tuota ihanaa, ihanaa ilmaa! virkkoi Angélique. Se tekee


elämän suloiseksi.

Ja ennenkuin hän kumartui työhönsä, hän unohtui vielä hetkiseksi


avonaisen ikkunan ääreen, josta säteilevä toukokuun aamu tulvi
huoneeseen. Auringon syrjä liukui tuomiokirkon harjan yli, ja
piispantalon puutarhasta lemahti tuore syreenintuoksu. Angélique
hymyili häikäistyneenä, kylpien sisääntulvivassa keväässä. Sitten hän
säpsähti, ikäänkuin olisi nukahtanut, ja sanoi:

— Isä, minulla ei ole läpiompelukultaa.

Hubert, joka oli lopettamassa jonkun messupuvun mallin


kalkkiopiirustusta, meni kaapille ja etsi sen sopukoista vyyhden,
leikkasi sen poikki ja kehitti hiukan kumpaakin päätä, raaputtaen
silkkilangan päällä olevaa kultaa; sitten hän toi vyyhden Angéliquelle
pergamenttipalasessa.

— Eikö muuta?

— Ei muuta.

Angélique oli heittänyt silmäyksen ympärilleen ja nähnyt ettei


mitään enää puuttunut: erilaiset kultalangat, punainen, viheriä ja
sininen; kaikenväriset silkkipuolat; päärmäyskulta ja kierrekulta,
pöyhötetty ja käherretty, rasian virkaa tekevässä hatunkopassa;
pitkät, hienot neulat, teräspihdit, sormustimet, sakset, vahatyyny.
Kaikki nämä olivat hujan hajan itse kehykselle pingotetulla kankaalla,
jolle oli levitetty suojaksi vahvaa harmaata paperia.

Hän oli pannut neulansilmään säikeen läpiompelukultaa. Mutta


heti ensi pistolla se katkesi, ja hänen täytyi kehittää sen päätä
uudestaan, raaputtamalla pois hiukan kultaa, jonka hän heitti samoin
kehyksellä ajelehtivaan jätevasuun.

— No vihdoinkin! sanoi hän, pistettyään neulan kankaan läpi.


Syvä hiljaisuus vallitsi. Hubert oli ryhtynyt pingottamaan kehystä.
Hän oli asettanut toisen tukin seinään kiinnitetylle pidikkeelle ja
toisen pukille, tarkalleen toistensa kohdalle, joten tukille kiinnitetyn
karmosiinipunaisen silkkisen messupukuvaatteen langat tulivat ihan
suoraan. Hän asetti sivulistat tukeissa oleviin reikiin, kiinnittäen ne
niihin neljällä nappulalla. Toimitettuaan kiinnipujotuksen oikealla ja
vasemmalla, hän sitten päätti pingottamisen, peräyttäen nappuloita.
Kun hän koputti kangasta sormellaan, kumisi se kuin rumpu.

Angéliquesta oli tullut erinomainen koruompelija. Hubertit


ihmettelivät hänen taitoaan ja aistiaan. Sen lisäksi, mitä he olivat
hänelle opettaneet, pani hän työhön oman herkän tunteensa, joka
saattoi elämää kukkiin ja uskoa vertauskuviin. Hänen käsissään silkki
ja kulta alkoivat elää, pienimmätkin koristeet saivat salaperäisen
lennokkuuden, hän pani niihin kaiken sielunsa, alati virkeän
mielikuvituksensa ja uskonsa näkymättömiin. Muutamat hänen
koruompeluistaan olivat niin kovasti liikuttaneet Beaumontin
pappiskuntaa, että eräs pappi, joka harrasti muinaistiedettä, ja
toinen, joka oli taiteentuntija, olivat tulleet häntä tervehtimään,
ilmaisten ihastuksensa hänen neitsytkuviinsa, joita he vertasivat
alkuaikaisen kirkon yksinkertaiseen kuvaustaiteeseen. Niissä oli sama
vilpittömyys, sama harras tunne, ikäänkuin vannehdittuna
yksityispiirteitten äärimmäisen tarkkaan täydellisyyteen. Hänellä oli
todella ihmeellinen piirustuslahja, joka, vaikkei hänellä ollut ollut
mitään muuta opetusta kuin omat harjotuksensa iltasin lampun
valossa, saattoi hänet usein muuttamaan mallejaan, poikkeamaan
niistä ja luomaan neulallaan oman mielikuvituksensa mukaan. Ja niin
joutuivat Hubertit, jotka pitivät piirustustaitoa välttämättömänä
hyvälle koruompelijalle, varjoon hänen rinnallaan, vaikka he olivat
niin paljon vanhempia ammatissa. He olivat lopulta vain hänen
vaatimattomia apulaisiaan, jotka jättivät hänen tehtäväkseen kaiken
vaativamman loistotyön, suorittaen itse niistä vain alustavat työt.

Millaisia loistavia ja pyhiä ihmeteoksia kulkikaan hänen kättensä


kautta vuosien mittaan! Hän eli keskellä silkkiä, satiinia, samettia,
kulta- ja hopeakankaita. Hän kirjaili messupaitoja, stola-vöitä,
käsiliinoja, kasukoita, dalmatikoja, hiippoja, lippuja, kalkkiverhoja ja
öylättirasia-peitteitä. Mutta varsinkin messupaitoja hän sai tehdä
tuon tuostakin; aina käytettiin niihin viittä väriä: valkoinen edusti
ripitystä ja neitseitä, punainen apostoleja ja marttyyrejä, musta
kuolleita ja paastoaikaa, orvokinsininen viattomia lapsia, viheriä
pyhiä juhlia. Usein käytettiin kultaakin, jonka saattoi panna
valkoisen, punaisen tai viheriän sijalle. Ristin keskuksessa oli aina
samat vertauskuvat, Jeesuksen ja Marian nimikirjaimet, säteitten
ympäröimä kolmio, karitsa, pelikaani, kyyhkynen, kalkki, öylättirasia
ja piikkiköynnöksen ympäröimä vertavuotava sydän; kauluksessa ja
hihoissa taasen kiemurteli koristekuvioita tahi kukkia, koko vanhojen
tyylien koristepaljous, kaikki suurikukkaiset kasvit, vuokot,
tulppaanit, pioonit, granaattiomenat, hortensiat. Ei mennyt yhtään
vuodenaikaa, ettei hän olisi ommellut joitakin vertauskuvallisia tähkiä
ja terttuja, mustalle pohjalle hopealla, punaiselle kullalla. Hyvin
upeihin messupaitoihin hän väritteli kuvaelmia, pyhimysten päitä,
ynnä keskusalueen, johon hän kuvasi Marian ilmestyksen,
Vapahtajan syntymän ja ristiinnaulitsemisen. Milloin olivat
kultakirjaukset ommellut suoraan pohjavaatteelle, milloin taas hän
kiinnitti silkkiset tai satiiniset kuviokaistaleet kultakirjovaatteelle tahi
sametille. Ja tämä säihkyvä, pyhä kukkasloiste syntyi pisto pistolta
hänen hoikkien sormiensa liikkeistä.

Se messupaita, jota Angélique tällä kertaa kirjaili, oli valkoisesta


satiinista. Sen ristin muodosti kimppu kultaisia liljoja, joitten väliin oli
pujoteltu heleänvärisiä ruusuja varjotetusta silkistä. Keskellä,
himmeästä kullasta ommeltujen pienten ruusujen muodostaman
seppeleen ympäröimänä säteilivät Marian nimikirjaimet, punaisella ja
viheriällä kullalla ommeltuina, runsaasti koristettuina.

Hän ompeli viimeisiä pienten kultaruusujen lehtiä läpipistoilla, ja


siten kului tunti täydellisessä äänettömyydessä. Mutta säie katkesi
uudelleen ja hän pani sen jälleen neulansilmään kehyksen alla
katsomatta siihen, kuten taitavan koruompelijan tulee.
Kohottaessaan päänsä hän näytti pitkällä siemauksella juovan
sisäänvirtaavaa kevättä.

— Oi, kuiskasi hän, kyllä oli kaunista eilen!… Kuinka tuo


auringonpaiste tekee hyvää!

Hubertine, joka juuri vahasi lankaansa, pudisti päätään.

— Minä olen ihan kuin piesty, jäseneni ovat kaikki turtana. Enhän
olekaan kuusitoistavuotias, kuten sinä, ja kun tulee niin vähän
olleeksi ulkona!

Hän ryhtyi kuitenkin heti jälleen työhön. Hän valmisti liljoja,


neuloen veliinipalasia merkittyihin kohtiin piirustuksessa, jotta kuviot
kohoaisivat enemmän pohjapinnasta.

— Ja sitten nämä ensimmäiset päivänpaisteet panevat teidät


puolipyörryksiin, lisäsi Hubert, joka kehyksen pingotettuaan ryhtyi
kalkkioimaan silkille kaapun reunustaa.

Angélique oli jäänyt haaveilevin silmin katsomaan erääseen kirkon


pilariin heijastuvaa auringonsädettä. Hiljaisella äänellä hän vastasi:
— Ei, ei, minua se virkisti, tuo eilinen ulkoilmapäivä vei minusta
pois väsymyksen.

Saatuaan valmiiksi pienet kultalehdet, hän kävi käsiksi yhteen


suurista ruusuista, pitäen valmiina yhtä monta valmiiksi pujotettua
säiettä kuin oli eri värivivahduksia ja ommellen erkanevilla ja jälleen
yhtyvillä pistoilla, terälehtien kuperan muodon mukaan. Ja vaikka työ
olikin näin arkaluontoista, purkautuivat nyt hänen huuliltaan
edellisen päivän muistot, joita hän äsken hiljaisuudessa oli
johdatellut mieleensä, niin lukuisina ja elävinä, ettei hän saanut
lopetetuksikaan. Hän muisteli lähtöä, avaroita niittyjä, aamiaista
Hautecoeurin linnan raunioilla eräässä kivipermantoisessa salissa,
jonka murtuneet seinät kohosivat korkealla kummulla puolensadan
metrin päässä salavien reunustamasta Ligneulin joesta. Hän ei
voinut saada mielestään noita raunioita, noita hajallaan olevia,
sinivattupensaitten peittämiä jäännöksiä, jotka kertoivat tuon
jättiläisen mahtavasta suuruudesta siihen aikaan, kun se pystyssä
seisovana hallitsi molempia laaksoja. Linnotustorni seisoi vieläkin
kuudenkymmenen metrin korkuisena, sortunein huipuin,
haljenneena, mutta sentään vahvana viisitoista jalkaa paksulla
perustallaan. Kaksi muuta tornia oli myöskin säilynyt, Kaarle Suuren
torni ja Davidin torni, ja niitä yhdistävä valli oli melkein ehyt.
Muurien sisäpuolella voi nähdä osan rakennuksia, linnankirkon,
oikeussalin ynnä muita huoneita. Ja porrasastuimet, ikkunain
ulkonemat, pengermien penkit näyttivät nykyaikaisten ihmisten
mittakaavaan verrattuina kuin jättiläisten rakentamilta. Se oli
kokonainen linnotettu kaupunki, viisisataa soturia saattoi siinä kestää
piiritystä kolmekymmentä kuukautta elatusvarojen ja
ampumatarpeitten loppumatta. Kahden vuosisadan aikana olivat jo
orjanruusupensaat levitelleet muurikivien reunaan rakennuksen
alaosissa, syreenejä ja kultasadepensaita kasvoi alasromahtaneitten
kattojen muodostamilla sorakasoilla, vartiahuoneen liedessä kasvoi
plataani. Mutta auringon laskiessa, kun linnotustornin ruho ojensi
varjonsa kenttien yli kolme penikulmaa pitkälle ja koko linna näytti
rakentuvan uudelleen mahtavaan haahmoonsa illan hämärässä,
saattoi vielä tuntea sen muinaisen mahdin, sen jäykän voiman, joka
oli tehnyt siitä vallottamattoman linnotuksen, jota vapisten pelkäsivät
itse Ranskan kuninkaatkin.

— Ja minä olen varma, jatkoi Angélique, että siinä asuu henkiä,


jotka kummittelevat yöllä. Siellä kuuluu kaikenlaisia ääniä, siellä
kurkistelee joka sopesta olentoja, ja minäkin näin, kun olimme
lähteneet sieltä, taakse katsoessani suuria valkoisia haamuja
liitelevän muurien yläpuolella… Eikö se ole totta, äiti, te joka tiedätte
linnan historian?

Hubertine hymyili tyynesti.

— Oh, kummituksia en minä ole koskaan nähnyt.

Mutta hän tunsi kyllä linnan tarinan, jonka hän oli lukenut jostakin
kirjasta, ja tytön innokkaitten kysymysten johdosta hänen täytyi
kertoa se uudelleen.

Linnan alue kuului Reimsin arkkipiispan-istuimelle pyhän


Remigiuksen ajalta asti, joka oli saanut sen Klodovigilta.
Kymmenennen vuosisadan alussa eräs arkkipiispa Severinus
rakennutti Hautecoeuriin linnotuksen, puolustaakseen maata
normanneja vastaan, jotka samosivat Oise-virtaa ylöspäin, mihin
Ligneul laskee. Seuraavalla vuosisadalla eräs Severinuksen seuraaja
antoi sen läänitykseksi Norbertille, Normandian suvun nuoremmalle
jäsenelle, määräten kuudenkymmenen sou'n vuotuisen pohjaveron,
sillä ehdolla että Beaumontin kaupunki ja kirkko jäisivät verosta
vapaiksi. Siten tuli Norbert I ensimmäiseksi mieheksi siinä
kuuluisassa Hautecoeurin markiisien suvussa, joka siitä lähtien
täyttää historian. Hervé IV:n aikana, joka oli kaksi kertaa
kirkonkirouksessa kirkolle kuuluvan omaisuuden anastamisesta ja
harjotti maantierosvoutta, lyöden yhdellä iskulla kuoliaaksi
kolmekymmentä porvaria, Ludvig Paksu hävitti linnan tornin, kun sen
omistaja oli uskaltanut nousta kapinaan häntä vastaan. Raoul I, joka
oli lähtenyt ristiretkelle Filip Augustin kanssa, kaatui Akkon edustalla
saatuaan keihäänpiston sydämeensä. Mutta kuuluisin oli Jean V
Suuri, joka 1225 rakensi linnotuksen uudelleen, pystyttäen vajaassa
viidessä vuodessa Hautecoeurin mahtavan linnan, jonka suojassa
hän kerran jo uneksi Ranskan kruunusta. Ja selvittyään hengissä
kahdenkymmenen taistelun verileikistä hän kuoli sängyssään,
Skotlannin kuninkaan vävynä. Sitten oli vielä Félicien III, joka kulki
paljain jaloin Jerusalemiin, Hervé VII, joka vaati itselleen Skotlannin
kruunua, ja useita muita, mahtavia ja ylhäisiä halki vuosisatojen,
aina Jean IX:een asti, joka kardinaali Mazarinin aikana sai nähdä
linnansa hävityksen. Viimeisen piirityksen jälkeen tornien holvikatot
räjäytettiin ilmaan ja pistettiin palamaan rakennukset, jonne Kaarle
VI oli tullut karkottamaan hulluuttaan ja joissa lähes kaksisataa
vuotta myöhemmin Henrik IV oli asunut viikon päivät Gabrielle
d'Estrées'n kanssa. Kaikki nämä kuninkaalliset muistot nukkuivat nyt
nurmen alla.

Angélique kuunteli jännittyneenä, pysäyttämättä neulaansa,


ikäänkuin nuo muinaiset valtaherrat olisivat ilmestyneet näkyviin itse
ompelukehyksestä, sitä mukaa kuin ruusu siinä syntyi vienoon
värielämään. Hänen puutteellinen historiantietonsa suurensi
tapahtumia, siirtäen ne ihmeellisen legendan tasolle. Hän värisi
hartaasta ihastuksentunteesta, linna kohosi jälleen pystyyn, nousten
aina taivaan porttien tasalle, ja Hautecoeurit olivat pyhän neitsyen
orpanoita.

— Ja meidän uusi piispamme, monseigneur d'Hautecoeur, on siis


tuon suvun jälkeläinen? kysyi hän.

Hubertine vastasi, että monseigneur varmaan oli jonkun suvun


nuoremman haaran jäsen, sillä vanhempi haara oli jo ammoin
sammunut. Se oli muuten omituinen seikka, sillä Hautecoeurin
markiisit ja Beaumontin papisto olivat kautta vuosisatain olleet
sotajalalla. Noin 1150 eräs abotti ryhtyi rakennuttamaan kirkkoa,
ainoastaan seurakunnalliset varat käytettävänään. Rahat
loppuivatkin, rakennuksen ollessa vasta sivukappelien holvikattojen
tasalla, ja täytyi tyytyä kattamaan päälaiva puukatoksella.
Kahdeksankymmentä vuotta myöhemmin Jean V, saatuaan linnan
uudestaanrakennetuksi, antoi kolmesataatuhatta livreä, jotka muihin
summiin lisättynä tekivät mahdolliseksi kirkon rakennuksen
jatkamisen. Päälaiva sai holvikaton. Kirkon kaksi tornia ja suuri
julkisivu valmistuivat vasta paljon myöhemmin, noin 14S0,
puhtaaseen viidennentoista vuosisadan tyyliin. Korvaukseksi Jean
V:n anteliaisuudesta papisto antoi hänelle ynnä hänen jälkeläisilleen
hautapaikkaoikeuden eräässä kuorikappelissa, joka oli pyhitetty
pyhälle Yrjölle ja jota siitä pitäen kutsuttiin Hautecoeurin kappeliksi.
Mutta hyviä välejä ei kestänyt kauan. Linnanherrat pyrkivät yhtenään
riistämään Beaumontilta sen verovapautta, lakkaamatta syntyi riitoja
vero- ja etuoikeuskysymyksistä. Varsinkin kysymys tilausoikeudesta,
jota linnanherrat vaativat itselleen ja joka olisi tehnyt mahdottomaksi
laivaliikkeen Ligneul-joella, muodostui loppumattomaksi riidan
pitkittäjäksi, kun alakaupunki alkoi huomattavasti vaurastua
hienovaate-teollisuutensa avulla. Siitä ajasta alkaen Beaumontin
onnentähti yleni päivä päivältä, kun Hautecoeurin tähti taas aleni,
kunnes hävityksen kohdatessa linnaa kirkko sai täydellisen voiton.
Ludvig XIV teki siitä tuomiokirkon, piispantalo rakennettiin entiseen
luostaripihaan. Ja sattuma määräsi nyt, että juuri Hautecoeurin
suvun jälkeläinen tuli piispana hallitsemaan tätä yhä pystyssä
pysynyttä papistoa, joka oli voittanut hänen esi-isänsä
nelisatavuotisen taistelun perästä.

—- Mutta, sanoi Angélique, monseigneurhän on ollut naimisissa.


Hänellä on aikainen, kahdenkymmenen vuoden vanha poika, eikö
niin?

Hubertine oli ottanut sakset korjatakseen erästä veliinipalaa.

— Niin kyllä, pastori Cornille on kertonut sen minulle. Se on hyvin


surullinen tarina… Monseigneur tuli kapteeniksi yhdenkolmatta
vuoden vanhana, Kaarle X:n aikana. Neljänkolmatta vuotiaana, 1830,
hän otti eron, ja kerrotaan, että hän aina neljänkymmenen ikään asti
vietti huikentelevaa elämää … matkoja, seikkailuja, kaksintaisteluja.
Sitten eräänä iltana, ollessaan joittenkin ystäviensä luona maalla,
hän kohtasi kreivi de Valençay'n tyttären Paulen, joka oli hyvin rikas,
ihmeen kaunis, tuskin yhdeksäntoistavuotias, kaksikymmentäyksi
vuotta nuorempi häntä. Hän rakastui neitoon kuin hullu ja neito
jumaloi häntä, häät oli pidettävä mitä pikimmin. Silloin hän osti
Hautecoeurin rauniot polkuhinnalla, kymmenellätuhannella frangilla
muistaakseni, hänellä oli nimittäin aikomus panna linna jälleen
kuntoon ja asettua siihen asumaan puolisoineen. Yhdeksän
kuukautta he olivat eläneet syrjässä eräällä vanhalla maatilalla
Anjoussa, kieltäytyen tapaamasta ketään, nauttien hetkistä, jotka
tuntuivat liian lyhyiltä… Paule synnytti pojan ja kuoli.

Hubert paineli mallipiirustusta valkoisella väritukolla. Hän kohotti


päätään, ja hänen kasvonsa olivat kalpeat.
— Mies poloinen! kuiskasi hän.

— Kerrotaan, että hän oli kuolla, jatkoi Hubertine. Viikkoa


myöhemmin hän astui hengelliseen säätyyn. Siitä on kaksikymmentä
vuotta, ja hän on nyt piispa… Mutta kerrotaan vielä, että näitten
kahdenkymmenen vuoden aikana hän ei ole tahtonut nähdä
poikaansa, lasta, joka oli maksanut äitinsä hengen. Hän oli
lähettänyt lapsen pois luotaan, jättäen sen hoidettavaksi tämän
sedälle, eräälle vanhalle abotille, ja kieltänyt antamasta siitä edes
tietoja hänelle, koettaen unohtaa sen olemassaolon. Kun hänelle
sitten kerran lähetettiin lapsen muotokuva, luuli hän näkevänsä
rakkaan vaimovainajansa, ja hänet löydettiin lattialta tiedottomana,
kuin moukarin iskun kohtaamana… Mutta ikä ja rukoukset lienevät
sittemmin keventäneet tuota syvää surua, sillä pastori Cornille sanoi
minulle eilen, että monseigneur on vihdoinkin kutsunut poikansa
luokseen.

Angélique oli saanut valmiiksi ruusun, joka oli niin tuore että se
tuntui melkein tuoksuvan, katsoi jälleen ulos auringonpaisteisesta
ikkunasta haaveellisin silmin ja virkkoi matalalla äänellä:

— Monseigneurin poika…

Hubertine päätti kertomuksensa:

— Nuori mies, kaunis kuin jumala, kuulemma. Hänen isänsä halusi


hänestä pappia. Mutta abotti-vanhus ei siihen suostunut, kun pojalla
ei ollut vähintäkään kutsumusta… Ja omaisuutta monet miljoonat!
Viisikymmentä miljoonaa, jos puheissa on perää! Niin, hän kuuluu
perineen äidiltään viisi miljoonaa, ja ne on sijotettu tonttialueihin
Pariisissa, joilla on nyt yli viidenkymmenen miljoonan frangin arvo.
Siis rikas kuin kuningas!
— Rikas kuin kuningas, kaunis kuin jumala, kertasi Angélique
itsetiedottomasti, uneksivalla äänellä.

Ja koneellisella kädenliikkeellä hän otti kehykseltä puikon, jossa oli


kultusäie, ryhtyäkseen valmistamaan gipyyri-ompelulla suurta liljaa.
Vedettyään kultalankaa esiin puikon kärjestä, hän kiinnitti sen pään
silkkirihmapistolla ihan korokkeeksi ommellun veliinin reunaan.
Alettuaan sitten ommella hän virkkoi vielä, lopettamatta lausettaan,
ajaen takaa kaukaista, epämääräistä toivetta:

— Oi, minä tahtoisin, minä tahtoisin…

Tuli jälleen syvä hiljaisuus, jota hämmensi vain kirkosta vaimeasti


kuuluva veisuu. Hubert laittoi piirustustaan lopulliseen kuntoon,
kuljettaen siveltimen kärkeä pitkin värijauheen tekemiä pisteviivoja;
ja kaavun koristeet ilmestyivät siten valkoisina punaiselle
silkkipohjalle. Hän alotti jälleen puhelun.

— Ennen muinoin oli suurenmoista! Ylhäiset herrat käyttivät


pukuja, jotka olivat ihan kankeat koruompeluista. Lyonissa myytiin
vaatetta, joka maksoi kuusikin sataa livreä kyynärä. Sen ymmärtää,
kun lukee sen aikuisia koruompelumestarien ohjesääntöjä; niissä
sanotaan, että kuninkaallisilla koruompelijoilla on oikeus asevoimalla
ottaa työhönsä muitten mestarien työntekijöitä… Ja meillä oli
vaakunakilvetkin sinisellä pohjalla kultainen poikkijuova ja kolme
kultaista liljaa, kaksi ylhäällä ja yksi alhaalla… Ah, se oli kaunista
mutta siitä on kauan!

Hän vaikeni, koputtaen kynnellään vaatetta, poistaakseen pölyä.


Sitten hän jatkoi:
— Beaumontissa kulkee Hautecoeureistä vielä eräs tarina, jota
äitini usein kertoi minulle, kun olin pieni… Kauhea rutto raivosi
kaupungissa, puolet asukkaista olivat jo kuolleet, kun Jean V, sama
joka rakennutti linnan uudelleen, huomasi, että Jumala antoi hänelle
voiman taistella vitsausta vastaan. Silloin hän lähti paljain jaloin
sairaitten luokse, laskeutui polvilleen ja suuteli heitä suulle. Ja heti
kun hän oli huulillaan koskettanut sairaitten huulia, sanoen: »Jos
Jumala tahtoo, tahdon minäkin», tulivat sairaat terveiksi. Sen takia
ovat nuo sanat pysyneet Hautecoeurien tunnuslauseena, joilla
kaikilla on sen jälkeen ollut kyky parantaa ruttoa… Oh, ne olivat
mainioita miehiä! Kokonainen valtiassuku! Ennenkuin monseigneur
astui pappissäätyyn, oli hänen nimensä Jean XII, ja hänen poikansa
nimen perässä on kai myöskin järjestysnumero, kuin ruhtinaalla
ikään.

Jokainen hänen sanansa tuuditti ja jatkoi Angéliquen haaveilua.


Hän toisti yhä samalla laulavalla äänellä:

— Oi, minä tahtoisin, minä tahtoisin…

Pitäen kädessään puikkoa hän kuletti kultalankaa, koskematta


siihen kädellään, vuoroin oikeaan ja vasempaan, edestakaisin
veliinipalan yli, ja kiinnitti sen kussakin käänteessä silkkipistolla.
Suuri kultainen lilja alkoi vähitellen kukoistaa.

— Oi! minä tahtoisin, minä tahtoisin mennä naimisiin ruhtinaan


kanssa… Ruhtinaan, jota minä en olisi milloinkaan nähnyt, joka tulisi
jonakin iltana hämärän tullen ja ottaisi minua kädestä ja veisi
palatsiinsa… Ja minä tahtoisin, että hän olisi hyvin kaunis ja hyvin
rikas, oi, kaikkein kaunein ja rikkain mitä koskaan on maa päällään
kantanut! Minä kuulisin hevosten hirnuntaa ikkunani alta, ja jalokiviä
välkkyisi yhtenä hohteena minun ylläni, ja kultaa, sitä sataisi ja
tulvaisi, niin että heti kun aukaisisin käteni, niin kultaa varisisi
maahan… Ja vielä minä tahtoisin, että minun ruhtinaani rakastaisi
minua ihan mielettömästi, jotta minäkin rakastaisin häntä
mielettömästi. Me olisimme hyvin nuoria, hyvin puhtaita ja hyvin
jaloja, aina, aina!

Hubert oli poistunut kehyksensä äärestä ja lähestynyt häntä


hymyillen.
Mutta Hubertine varotti tyttöä hyväntahtoisesti sormellaan:

— Voi sinua turhamielistä olentoa, sinä olet ihan parantumaton!


Vai kuningattareksi sinä haluaisit. Se unelma ei kyllä ole niin rumaa
kuin sokerin varastaminen ja röyhkeät vastaukset, mutta pidä varasi,
siinä piilee sielunvihollinen, siinä houkuttelee sinua intohimo ja
ylpeys.

Angélique katsoi häneen iloisesti.

— Äiti, äiti, mitä te puhutte?… Onko sitten väärin rakastaa


kaunista ja rikasta? Minä rakastan sitä, koska se on kaunista, koska
se on rikasta, ja koska se ikäänkuin lämmittää minua täällä,
sydämessä… Te tiedätte kyllä, etten minä ole itsekäs. Kyllä te
näkisitte, mitä minä tekisin rahalla, jos minulla olisi paljon. Sitä
sataisi yli kaupungin, sitä virtaisi köyhille. Siitä syntyisi todellinen
siunaus, kurjuutta ei enää olisikaan! Ensiksi tekisin rikkaaksi teidät ja
isän, tahtoisin nähdä teidät kultakirjovaatteissa niinkuin entisajan
ylhäiset naiset ja herrat.

Hubertine kohautti olkapäitään.

— Hupsu!… Mutta, hyvä lapsi, sinähän olet köyhä, ethän sinä saa
äyriäkään myötäjäisiä naimisiin mennessäsi. Kuinka voit uneksiakaan
ruhtinaasta? Ottaisitko siis mieheksesi rikkaamman kuin itse olet?

— Miksi en ottaisi!

Angélique oli kovasti kummastelevan näköinen.

— Tietysti, ottaisin minä!… Kun hänellä olisi rahaa, niin miksi sitä
tarvitsisi olla minulla? Minä saisin kiittää häntä kaikesta ja rakastaisin
häntä senvuoksi sitä enemmän.

Tuo kumoamaton todistus ihastutti Hubertia. Hän seurasi


mielellään lasta hänen pilvimatkalleen. Hän huudahti:

— Angélique on oikeassa.

Mutta vaimo heitti häneen tyytymättömän katseen. Hän tuli


vakavaksi.

— Tyttöseni, sinä näet kyllä vastedes, kun tulet tuntemaan


elämää.

— Kyllä minä tunnen elämää.

— Missä olisit oppinut sitä tuntemaan?… Sinä olet liian nuori, et


tunne maailman pahuutta. Mutta usko minua, pahuus on suuri, se
on kaikkivaltias.

— Pahuus, pahuus…

Angélique äänsi tuon sanan hitaasti, päästäkseen perille sen


merkityksestä. Ja hänen puhtaissa silmissään oli yhä sama viattoman
hämmästyksen ilme. Hän tunsi kyllä pahuuden, olihan Legendassa
siitä kyllin kerrottu. Eikö pahuus ollut samaa kuin paholainen? Ja
eikö hän ollut nähnyt, että paholainen syntyi yhä uudelleen, mutta
voitettiin aina? Jokaisessa taistelussa hän sortui surkeasti saamistaan
iskuista.

— Voi, jos te tietäisitte, äiti, kuinka minä halveksin pahuutta!… Ei


tarvitse muuta kuin voittaa itsensä, niin tulee onnelliseksi.

Hubertine teki surullisen huolestuneen eleen.

— Sinä saatat minut katumaan, että olen kasvattanut sinut täällä


yksin meidän kanssamme, kaikesta erillään, näin tietämättömänä
elämästä… Mistä paratiisista sinä oikein uneksit? Millaiseksi sinä
kuvittelet maailmaa?

Nuoren tytön kasvot kirkastuivat suuresta toivosta. Hän oli


kumartuneena työnsä yli, kulettaen puikkoa yhä samalla jatkuvalla
liikkeellä.

— Te pidätte minua varmaan hyvin tyhmänä, äiti?… Maailma on


täynnä kelpo ihmisiä. Kun elää hyvin ja tekee työtä, niin se tulee
palkituksi aina… Oh, kyllä tiedän, että on joitakin pahojakin ihmisiä.
Mutta mitä niistä on väliä? Kun pysyy niistä erillään, niin ne tulevat
pian rangaistuiksi… Ja sitten, katsokaas, maailma näyttää minusta
etäältä katsoen suurelta puutarhalta, niin, äärettömältä puistolta,
joka on täynnä kukkia ja päivänpaistetta. On niin hyvä elää, elämä
on niin suloinen, ettei se voi olla paha.

Hän vilkastui, kuin olisi silkin ja kullan loiste mennyt hänen


päähänsä.

— Onnihan on niin yksinkertainen asia. Me kolme olemme


onnellisia. Ja miksi? Siksi, että rakastamme toisiamme. Siinä kaikki,
se ei ole sen vaikeampaa… Ja kyllä te saatte nähdä, sitten kun se
tulee, jota odotan. Me tunnemme toisemme heti. Minä en ole häntä
koskaan nähnyt, mutta minä tiedän millainen hän tulee olemaan.
Hän tulee sisään ja sanoo: Minä tulin sinua noutamaan. Ja minä
sanon: Minä olen odottanut sinua, ota minut. Hän ottaa minut, ja
sillä se on tehty, kaikiksi ajoiksi. Me menemme palatsiin nukkumaan
timanteilla koristetulla kultavuoteella. Oh! se on hyvin yksinkertaista!

— Sinä olet hullu, ole vaiti! keskeytti Hubertine ankarasti.

Ja nähdessään että hän oli innoissaan ja valmiina palaamaan


jälleen unelmaansa, jatkoi hän:

— Ole vaiti! Sinä saatat minut pelkäämään… Onneton, kun


naitamme sinut jollekin köyhälle raukalle, niin sinä murskaat luusi,
pudotessasi jälleen maahan. Onni on meille köyhille vain
nöyryydessä ja kuuliaisuudessa.

Angélique hymyili yhä, tyvenen itsepintaisesti.

— Minä odotan, ja hän tulee.

— Mutta hänhän on oikeassa! huudahti Hubert, hänkin


intoutuneena, herkän verensä nostattamana. Miksi torut häntä?…
Hän on kyllin kaunis, jotta kuningaskin voi tulla häntä pyytämään.
Kaikkea voi tapahtua.

Surullisena Hubertine nosti häneen kauniit, viisaat silmänsä.

— Älä toki yllytä häntä tekemään pahoin. Sinä tiedät paremmin


kuin kukaan muu, mitä sydämensä totteleminen maksaa.

Hubert tuli hyvin kalpeaksi, suuret kyynelet kohosivat hänen


silmiinsä. Hubertine oli paikalla katunut nuhdettaan, hän oli noussut
ylös tarttuakseen hänen käsiinsä. Mutta Hubert veti itsensä irti,
sopertaen katkonaisella äänellä:

— Ei, ei, minä olin väärässä… Kuule, Angélique, sinun tulee kuulla
äitiäsi. Me olemme molemmat mielettömiä, hän yksin on järkevä…
Minä olin väärässä, minä olin väärässä…

Hän oli liian kiihottunut voidakseen istuutua, ja hän jätti


kehykseen pingotetun kaavun, alkaen sen sijaan liimata lippua, joka
oli kehyksellä valmiina. Otettuaan kaapista astian Flanderin-liimaa
hän siveli sitä siveltimellä vaatteen nurjalle puolelle, jotta
koruompelu kovettuisi. Hänen huulensa värähtelivät vielä hiukan,
eikä hän enää puhunut mitään.

Mutta vaikka Angélique tottelevaisesti oli myöskin vaiti, jatkoi hän


haaveiluaan hiljaa itsekseen, nousten yhä ylemmäksi, yhä vieläkin
ylemmäksi toiveittensa pilvimaahan. Kaikki hänessä sitä ilmaisi,
hänen puoliavoimen suunsa haltioitunut ilme, hänen silmänsä, jotka
heijastivat hänen näkyjensä auersineä. Tätä köyhän tytön unelmaa
hän nyt kirjaili kultalangallaan; siitä syntyi nyt valkoiselle kiiltosilkille
sekä suuret liljankukat että ruusut ja Marian nimikirjaimet. Liljan
varsi oli kuin valon säde, sen pitkät ja kapeat lehdet kaatuivat alas
tähtisateena. Häikäisevin oli vahvasti kohoavalla gipyyriompelulla
tehty, upokekuvioilla koristettu Marian nimikirjain keskellä ristiä, se
paloi kuin tabernaakkelin pyhyys, liekehtien salaperäisin sätein. Ja
hienoväriset silkkiruusut elivät, ja koko messupaita loisti hohtavan
valkoisena kultaisten ihmekukkiensa ihanuudessa.

Pitkän äänettömyyden jälkeen Angélique nosti päänsä. Hän katsoi


Hubertineen veitikkamaisesti, nykäisi leukaansa ja toisti:

—- Minä odotan, ja hän tulee.


Tuo mielikuva oli hullu. Mutta hän riippui siinä itsepäisesti. Hän oli
varma, että niin tulisi tapahtumaan. Ei mikään voinut järkyttää
hänen hymyilevää vakaumustaan.

— Minä sanon sinulle, äiti, että kaikki tämä tulee tapahtumaan.

Hubertine tarttui puheeseen leikin kannalta. Hän alkoi ärsyttää


Angéliquea.

— Mutta minähän luulin, ettet sinä ollenkaan tahtoisi mennä


naimisiin. Eiväthän pyhimyksetkään, jotka ovat saaneet sinut
pyörälle päästäsi, menneet naimisiin. Ennenkuin he siihen
suostuivat, he mieluummin käännyttivät sulhasensa, karkasivat
kotoaan ja antoivat katkaista kaulansa.

Nuori tyttö kuunteli ällistyneenä. Sitten hän purskahti heleään


nauruun. Koko hänen olentonsa terveys, hänen elämänrakkautensa
kaikui tuossa helisevässä iloisuudessa. Nuo pyhimystaruthan olivat
niin vanhoja! Ajat olivat toki muuttuneet, Jumala oli saanut voiton
eikä vaatinut enää ketään tähtensä kuolemaan. Legendassa esiintyvä
ihmeenomaisuus oli tehnyt häneen suuremman vaikutuksen kuin
maailman-halveksiminen ja kuoleman-halu. Ei, luonnollisesti hän
tahtoi mennä naimisiin ja rakastaa ja olla rakastettu ja olla
onnellinen!

— Häpeä toki! jatkoi Hubertine, sinähän saatat Agneksen,


suojeluspyhimyksesi, itkemään. Eikö muista, että hän ei huolinut
maaherran pojasta, vaan piti parempana kuolla, viettääkseen häitä
Jeesuksen kanssa?

Tornin suuri kello alkoi soida, varpusparvi pyrähti lentoon


tuuheasta murattiköynnöksestä, joka ympäröi erästä kuorin ikkunaa.
Welcome to our website – the ideal destination for book lovers and
knowledge seekers. With a mission to inspire endlessly, we offer a
vast collection of books, ranging from classic literary works to
specialized publications, self-development books, and children's
literature. Each book is a new journey of discovery, expanding
knowledge and enriching the soul of the reade

Our website is not just a platform for buying books, but a bridge
connecting readers to the timeless values of culture and wisdom. With
an elegant, user-friendly interface and an intelligent search system,
we are committed to providing a quick and convenient shopping
experience. Additionally, our special promotions and home delivery
services ensure that you save time and fully enjoy the joy of reading.

Let us accompany you on the journey of exploring knowledge and


personal growth!

textbookfull.com

You might also like