Skip to content

New Crowdin translations #1

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 143 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
143 commits
Select commit Hold shift + click to select a range
8bd63ad
New translations icons.psd (German)
Andrulko Oct 10, 2017
b1122f3
New translations index.md (Vietnamese)
Andrulko Oct 10, 2017
08769a5
New translations index.md (Vietnamese)
Andrulko Oct 10, 2017
afc24f5
New translations index.md (Vietnamese)
Andrulko Oct 10, 2017
69e9e8a
New translations adding-instance-properties.md (Vietnamese)
Andrulko Oct 10, 2017
7d6b9ad
New translations index.md (Vietnamese)
Andrulko Oct 10, 2017
89cb447
New translations commits.md (Vietnamese)
Andrulko Oct 10, 2017
e823bc3
New translations deepstream.md (Vietnamese)
Andrulko Oct 10, 2017
4a1a3e2
New translations elastic-header.md (Vietnamese)
Andrulko Oct 10, 2017
40a797c
New translations firebase.md (Vietnamese)
Andrulko Oct 10, 2017
0b2332c
New translations hackernews.md (Vietnamese)
Andrulko Oct 10, 2017
735dd80
New translations vue-011-release.md (Vietnamese)
Andrulko Oct 10, 2017
e0c66bd
New translations 011-component.md (Vietnamese)
Andrulko Oct 10, 2017
98c2edb
New translations 012-release.md (Vietnamese)
Andrulko Oct 10, 2017
7ca1d32
New translations 1.0.0-release.md (Vietnamese)
Andrulko Oct 10, 2017
12ae288
New translations announcing-2.0.md (Vietnamese)
Andrulko Oct 10, 2017
c257482
New translations common-gotchas.md (Vietnamese)
Andrulko Oct 10, 2017
8c5533a
New translations march-update.md (Vietnamese)
Andrulko Oct 10, 2017
0c9dd7d
New translations vue-cli.md (Vietnamese)
Andrulko Oct 10, 2017
23e39c8
New translations vue-next.md (Vietnamese)
Andrulko Oct 10, 2017
986c70f
New translations vuejs-010-release.md (Vietnamese)
Andrulko Oct 10, 2017
1372eb5
New translations why-no-template-url.md (Vietnamese)
Andrulko Oct 10, 2017
6245b77
New translations grid-component.md (Vietnamese)
Andrulko Oct 10, 2017
9158d10
New translations index.md (Vietnamese)
Andrulko Oct 10, 2017
ae48577
New translations ssr.md (Vietnamese)
Andrulko Oct 10, 2017
a29fe93
New translations migration.md (Vietnamese)
Andrulko Oct 10, 2017
e927f2d
New translations mixins.md (Vietnamese)
Andrulko Oct 10, 2017
707f08a
New translations plugins.md (Vietnamese)
Andrulko Oct 10, 2017
1584917
New translations reactivity.md (Vietnamese)
Andrulko Oct 10, 2017
9fca287
New translations render-function.md (Vietnamese)
Andrulko Oct 10, 2017
7ae56f1
New translations routing.md (Vietnamese)
Andrulko Oct 10, 2017
e11c56e
New translations single-file-components.md (Vietnamese)
Andrulko Oct 10, 2017
5da6963
New translations state-management.md (Vietnamese)
Andrulko Oct 10, 2017
45713e4
New translations migration-vue-router.md (Vietnamese)
Andrulko Oct 10, 2017
9996d56
New translations syntax.md (Vietnamese)
Andrulko Oct 10, 2017
f9f19ae
New translations team.md (Vietnamese)
Andrulko Oct 10, 2017
e739dbe
New translations transitioning-state.md (Vietnamese)
Andrulko Oct 10, 2017
830502e
New translations transitions.md (Vietnamese)
Andrulko Oct 10, 2017
086b089
New translations typescript.md (Vietnamese)
Andrulko Oct 10, 2017
f927afe
New translations unit-testing.md (Vietnamese)
Andrulko Oct 10, 2017
cf70e5f
New translations index.md (Vietnamese)
Andrulko Oct 10, 2017
7d649eb
New translations migration-vuex.md (Vietnamese)
Andrulko Oct 10, 2017
ca92f03
New translations list.md (Vietnamese)
Andrulko Oct 10, 2017
d02e66c
New translations modal.md (Vietnamese)
Andrulko Oct 10, 2017
368a0e3
New translations computed.md (Vietnamese)
Andrulko Oct 10, 2017
ecb7a6a
New translations select2.md (Vietnamese)
Andrulko Oct 10, 2017
5bb7c2a
New translations svg.md (Vietnamese)
Andrulko Oct 10, 2017
97766c5
New translations todomvc.md (Vietnamese)
Andrulko Oct 10, 2017
e5ef0c3
New translations tree-view.md (Vietnamese)
Andrulko Oct 10, 2017
2461265
New translations class-and-style.md (Vietnamese)
Andrulko Oct 10, 2017
8ae72fe
New translations comparison.md (Vietnamese)
Andrulko Oct 10, 2017
a38521e
New translations components.md (Vietnamese)
Andrulko Oct 10, 2017
3248f44
New translations conditional.md (Vietnamese)
Andrulko Oct 10, 2017
2f21352
New translations join.md (Vietnamese)
Andrulko Oct 10, 2017
0a6a3a4
New translations custom-directive.md (Vietnamese)
Andrulko Oct 10, 2017
501d9c2
New translations deployment.md (Vietnamese)
Andrulko Oct 10, 2017
748731e
New translations events.md (Vietnamese)
Andrulko Oct 10, 2017
6457add
New translations filters.md (Vietnamese)
Andrulko Oct 10, 2017
e9d6235
New translations forms.md (Vietnamese)
Andrulko Oct 10, 2017
9ad431b
New translations index.md (Vietnamese)
Andrulko Oct 10, 2017
bd28079
New translations installation.md (Vietnamese)
Andrulko Oct 10, 2017
59feb2f
New translations instance.md (Vietnamese)
Andrulko Oct 10, 2017
c239876
New translations lifecycle.ai (German)
Andrulko Oct 10, 2017
b003fa5
New translations index.md (German)
Andrulko Oct 10, 2017
53e6986
New translations props-events.png (German)
Andrulko Oct 10, 2017
aa21f12
New translations state.png (German)
Andrulko Oct 10, 2017
14c7ff4
New translations transition.png (German)
Andrulko Oct 10, 2017
5591ed1
New translations typescript-type-error.png (German)
Andrulko Oct 10, 2017
732aa9a
New translations vue-component-with-preprocessors.png (German)
Andrulko Oct 10, 2017
53e7204
New translations vue-component.png (German)
Andrulko Oct 10, 2017
2ee4efc
New translations index.md (German)
Andrulko Oct 10, 2017
1aae619
New translations index.md (German)
Andrulko Oct 10, 2017
d3c52e6
New translations logged-proxied-data.png (German)
Andrulko Oct 10, 2017
5390bcd
New translations index.md (German)
Andrulko Oct 10, 2017
5d9de3c
New translations adding-instance-properties.md (German)
Andrulko Oct 10, 2017
75b9109
New translations index.md (German)
Andrulko Oct 10, 2017
9ab257e
New translations commits.md (German)
Andrulko Oct 10, 2017
18eecef
New translations deepstream.md (German)
Andrulko Oct 10, 2017
c198ae0
New translations elastic-header.md (German)
Andrulko Oct 10, 2017
c6975ed
New translations firebase.md (German)
Andrulko Oct 10, 2017
5e96efc
New translations mvvm.png (German)
Andrulko Oct 10, 2017
8180bab
New translations lifecycle.png (German)
Andrulko Oct 10, 2017
b9cd294
New translations hackernews.md (German)
Andrulko Oct 10, 2017
bb6e01b
New translations march-update.md (German)
Andrulko Oct 10, 2017
719a22f
New translations logo.ai (German)
Andrulko Oct 10, 2017
fb3112e
New translations state.ai (German)
Andrulko Oct 10, 2017
dc92ae9
New translations 011-component.md (German)
Andrulko Oct 10, 2017
6333cd3
New translations 012-release.md (German)
Andrulko Oct 10, 2017
2a57bb8
New translations 1.0.0-release.md (German)
Andrulko Oct 10, 2017
00287d2
New translations announcing-2.0.md (German)
Andrulko Oct 10, 2017
1657dce
New translations common-gotchas.md (German)
Andrulko Oct 10, 2017
786853d
New translations vue-011-release.md (German)
Andrulko Oct 10, 2017
bb660d0
New translations hn.png (German)
Andrulko Oct 10, 2017
3061bad
New translations vue-cli.md (German)
Andrulko Oct 10, 2017
dac873d
New translations vue-next.md (German)
Andrulko Oct 10, 2017
aaeb47f
New translations vuejs-010-release.md (German)
Andrulko Oct 10, 2017
6d79d3c
New translations why-no-template-url.md (German)
Andrulko Oct 10, 2017
c9e0b80
New translations components.png (German)
Andrulko Oct 10, 2017
da7474e
New translations data.png (German)
Andrulko Oct 10, 2017
f155272
New translations dom-tree.png (German)
Andrulko Oct 10, 2017
bd214f9
New translations hn-architecture.png (German)
Andrulko Oct 10, 2017
d4c4e13
New translations grid-component.md (German)
Andrulko Oct 10, 2017
a4bfeec
New translations index.md (German)
Andrulko Oct 10, 2017
656b8df
New translations index.md (German)
Andrulko Oct 10, 2017
45cc0f0
New translations ssr.md (German)
Andrulko Oct 10, 2017
57bc2f8
New translations migration.md (German)
Andrulko Oct 10, 2017
d1e7868
New translations mixins.md (German)
Andrulko Oct 10, 2017
c5b1112
New translations plugins.md (German)
Andrulko Oct 10, 2017
ead64fb
New translations reactivity.md (German)
Andrulko Oct 10, 2017
9fcb9b4
New translations render-function.md (German)
Andrulko Oct 10, 2017
67283dd
New translations routing.md (German)
Andrulko Oct 10, 2017
c728ac0
New translations single-file-components.md (German)
Andrulko Oct 10, 2017
d7d0df1
New translations state-management.md (German)
Andrulko Oct 10, 2017
dfbeaec
New translations migration-vue-router.md (German)
Andrulko Oct 10, 2017
ce7bfd7
New translations syntax.md (German)
Andrulko Oct 10, 2017
62637a4
New translations team.md (German)
Andrulko Oct 10, 2017
1b2dc2c
New translations transitioning-state.md (German)
Andrulko Oct 10, 2017
486720a
New translations transitions.md (German)
Andrulko Oct 10, 2017
6f45c80
New translations typescript.md (German)
Andrulko Oct 10, 2017
8137c46
New translations unit-testing.md (German)
Andrulko Oct 10, 2017
e5261d0
New translations index.md (German)
Andrulko Oct 10, 2017
8b3a9a1
New translations migration-vuex.md (German)
Andrulko Oct 10, 2017
4d722b1
New translations list.md (German)
Andrulko Oct 10, 2017
d9de467
New translations modal.md (German)
Andrulko Oct 10, 2017
557a359
New translations computed.md (German)
Andrulko Oct 10, 2017
6d202fa
New translations select2.md (German)
Andrulko Oct 10, 2017
368ab80
New translations svg.md (German)
Andrulko Oct 10, 2017
ce0087a
New translations todomvc.md (German)
Andrulko Oct 10, 2017
8241cf4
New translations tree-view.md (German)
Andrulko Oct 10, 2017
bc6f3ee
New translations class-and-style.md (German)
Andrulko Oct 10, 2017
ee3f4a9
New translations comparison.md (German)
Andrulko Oct 10, 2017
be9cc84
New translations components.md (German)
Andrulko Oct 10, 2017
d0136b3
New translations conditional.md (German)
Andrulko Oct 10, 2017
082d7d6
New translations join.md (German)
Andrulko Oct 10, 2017
01735ee
New translations custom-directive.md (German)
Andrulko Oct 10, 2017
754414f
New translations deployment.md (German)
Andrulko Oct 10, 2017
1949cb8
New translations events.md (German)
Andrulko Oct 10, 2017
9d7dd2a
New translations filters.md (German)
Andrulko Oct 10, 2017
675bb9e
New translations forms.md (German)
Andrulko Oct 10, 2017
ce79d29
New translations index.md (German)
Andrulko Oct 10, 2017
7431006
New translations installation.md (German)
Andrulko Oct 10, 2017
6d5c010
New translations instance.md (German)
Andrulko Oct 10, 2017
a891670
New translations index.md (Vietnamese)
Andrulko Oct 10, 2017
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
62 changes: 62 additions & 0 deletions de/_posts/011-component.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
---
title: 0.11 Component Tips
date: '2014-12-08 15:02:14'
tags: ""
---


<p class="tip">Note: this post contains information for the outdated 0.11 version. Please refer to the [0.12 release notes](https://github.com/yyx990803/vue/releases) for the changes in the API.</p>

The release of 0.11 introduced [many changes](https://github.com/yyx990803/vue/blob/master/changes.md), but the most important one is how the new component scope works. Previously in 0.10.x, components have inherited scope by default. That means in a child component template you can reference parent scope properties. This often leads to tightly-coupled components, where a child component assumes knowledge of what properties are present in the parent scope. It is also possible to accidentally refer to a parent scope property in a child component.

<!-- more -->

### Isolated Scope and Data Passing

Starting in 0.11, all child components have isolated scope by default, and the recommended way to control component data access is via [Explicit Data Passing](/guide/components.html#Explicit_Data_Passing) using [`v-with`](/api/directives.html#v-with) or [`paramAttributes`](/api/options.html#paramAttributes).

`paramAttributes` enables us to write Web Component style templates:

```js
Vue.component('my-component', {
paramAttributes: ['params'],
compiled: function () {
console.log(this.params) // passed from parent
}
})
```

```html
<my-component params="{{params}}"></my-component>
```

### Where Does It Belong?

Previously in 0.10, all directives on a component's container element are compiled in the child component's scope. Because it inherited parent scope, this worked in most situations. Starting in 0.11.1, we want to provide a cleaner separation between component scopes. The rule of thumbs is: if something appears in the parent template, it will be compiled in parent scope; if it appears in child template, it will be compiled in child scope. For example:

```html
<!-- parent template -->
<div v-component="child" v-on="click:onParentClick">
<p>{{parentMessage}}</p>
</div>
```

```html
<!-- child template, with replace: true -->
<div v-on="click:onChildClick">
<h1>{{childMessage}}</h1>
<content></content>
</div>
```

Everything in the parent template will be compiled in the parent's scope, including the content that's going to be inserted into the child component.

The only exception to the rule is `v-with` (and `paramAttributes` which compiles down to `v-with`), which works in both places - so you don't need to worry about it too much.

### Cleaner Event Communication

Previously the standard way for a child component to communicate to its parent is via dispatching events. However, with this approach, the event listeners on the parent component are not guaranteed to be listening on the desired child component only. It's also possible to trigger undesired listeners further up the chain if we do not cancel the event.

The most common use case is for a parent to react to the events from a specific, direct child component. So in 0.11.4, [a new directive `v-events`](/api/directives.html#v-events) has been introduced to enable exactly this behavior.

0.11.4 has already been released, go try it out!
89 changes: 89 additions & 0 deletions de/_posts/012-release.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
---
title: Vue.js 0.12 released!
date: '2015-06-11 17:37:30'
---
I'm really excited to announce that [Vue.js 0.12: Dragon Ball](https://github.com/yyx990803/vue/releases/tag/0.12.0) is finally here! Thanks to everyone who tried out the beta/rc versions and provided feedback / bug reports along the way.

There's a lot to cover in this release, and we will talk about a few highlights below. However, it is still recommended to carefully go through the [Full Release Note](https://github.com/yyx990803/vue/releases/tag/0.12.0) and updated docs if you are upgrading from 0.11. You can report bugs on GitHub, send questions to [vuejs/Discussion](https://github.com/vuejs/Discussion/issues), or join us in the [Gitter chat channel](https://gitter.im/yyx990803/vue).

<!-- more -->

### More Consistent Component Syntax

Previously in 0.11 you have two ways to use a Vue.js component: using the `v-component` directive, or using custom elements. There are also two ways to pass data down to child components: using the `v-with` directive, or using the `paramAttributes` option. Although both custom elements and param attributes get compiled down to directives eventually, it is confusing and redundant to have two sets of syntax for the same functionality.

In addition, it should be noted that the component system is a first-class concept in Vue.js, even more important than directives. It defines how we encapsulate our higher-level view logic and compose our application. In the meanwhile, having a clear and declarative way to pass data into child components is also very important. Components and param attributes really deserve their own dedicated syntax to differentiate from other directives.

As a result, `v-component` and `v-with` have been deprecated in 0.12. `paramAttributes` has also been renamed to `props`, which is shorter and cleaner. From now on, most Vue.js components will look like this:

```html
<my-component prop="{{parentData}}"></my-component>
```

There are also additional props-related improvements such as explicit one-time or one-way props, expression as props, methods as prop callbacks and more. You can find out more details in the 0.12 release notes linked above and the updated [Component System](/guide/components.html) section of the guide.

### Filter Arguments Improvements

In 0.11, filters always receive their arguments as plain strings. An argument can be enclosed in quotes to include whitespace, but the quotes are not automatically stripped when passed into the filter function. Some users were also confused about how to retrive a dynamic value on the vm instead of a plain string.

In 0.12, the filter argument syntax now follows a simple rule: if an argument is enclosed in quotes, it will be passed in as a plain string; otherwise, it will be evaluated against the current vm as a dynamic value.

This means the usage of some existing filters will have to change:

```html
<a v-on="keyup: onKeyUp | key 'enter'"></a>
{{ items.length | pluralize 'item' }}
```

But it would make custom filters that rely on dynamic values much easier to write:

```html
{{ msg | concat otherMsg }}
```

Here the first argument to the `concat` filter will be the value of `this.otherMsg`.

### Asynchronous Components

It is common practice to bundle all the JavaScript into one file when building large single page applications. But when the file becomes too large, we may want to defer loading parts of our application for a faster initial load. However, this does pose some constraints on how the application architecture should be designed. It could be very tricky to figure out how to properly split up your JavaScript bundles.

Well, with Vue.js we can already build our applications as decoupled components. If we can lazily load a dynamic component only when it is needed, wouldn't it be awesome? As a matter of fact, in 0.12 this would be trivially easy with the new Asynchronous Component feature.

In 0.12, you can define a component as a factory function that asynchronously resolves a component definition (can be just a plain options object). Vue.js will only trigger the factory function when the component actually needs to be rendered, and will cache the result for future re-renders:

```js
Vue.component('async-example', function (resolve, reject) {
setTimeout(function () {
resolve({
template: '<div>I am async!</div>'
})
}, 1000)
})
```

It is up to you to decide how to load the component from the server, e.g. `$.getScript()` or require.js; but the recommended usage is to pair it up with Webpack's [Code Splitting feature](http://webpack.github.io/docs/code-splitting.html):

```js
Vue.component('async-webpack-example', function (resolve, reject) {
// In Webpack AMD like syntax indicates a code split point
require(['./my-async-component'], resolve)
})
```

That's all you need to do. You can use the component just like before, without even thinking about it being async. Webpack will automatically split your final JavaScript into separate bundles with correct dependencies, and automatically load a bundle via Ajax when it is required. You can check out a fully functional example [here](https://github.com/vuejs/vue-webpack-example).

### Improved Transition System

Vue.js' transition system is really easy to use, but in the past it has the limitation that you cannot mix CSS and JavaScript-based transitions together. In 0.12 that is no longer the case! The improved transition system now allows you to add JavaScript hooks to a CSS-based transition for additional control. The amount of hooks exposed have also been expanded to give you finer-grained control at every stage of the transition.

`v-repeat` now also ships with built-in support for staggering transitions. It is as simple as adding `stagger="100"` to your repeated element. It is also possible to define separate staggering for enter and leaving, or even dynamically calculate the staggering delay in a JavaScript hook.

For full details on the new transition system, check out the [updated guide](/guide/transitions.html).

### Performance Tuning

Vue.js' precise dependency tracking makes it the one of the most efficient view layer for small hot updates, but there's always room for improvement. In 0.12, internal instance creation and compilation refactors have improved first-render performance for large lists by up to 40%. With proper `track-by` usage, [re-rendering with large, brand new dataset](http://vuejs.github.io/js-repaint-perfs/vue/) is also comparable to, or even faster than other Virtual-DOM based frameworks.

### One More Thing...

With 0.12 out of the door, more efforts will now be spent on the official vue-router, a dedicated routing library for Vue.js with nested view matching, full transition support, and asynchronous data hooks. I have expressed that Vue.js core intends to stay as a no-frills, drop-in view layer library, and that will not change. The vue-router will be shipped separately and is totally optional, however you can expect it to work seamlessly with Vue.js core when you need it.
63 changes: 63 additions & 0 deletions de/_posts/1.0.0-release.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
---
title: Vue.js 1.0.0 Released
date: '2015-10-26 10:00:00'
---
> Hi HN! If you are not familiar with Vue.js, you might want to read this [blog post](http://blog.evanyou.me/2015/10/25/vuejs-re-introduction/) for a higher level overview.

After 300+ commits, 8 alphas, 4 betas and 2 release candidates, today I am very proud to announce the release of [Vue.js 1.0.0 Evangelion](https://github.com/vuejs/vue/releases/tag/1.0.0)! Many thanks to all those who participated in the API re-design process - it would not have been possible without all the input from the community.

<!-- more -->

### Improved Template Syntax

The 1.0 template syntax resolves a lot of subtle consistency issues and makes Vue templates more concise and more readable in general. The most notable new feature is the shorthand syntax for `v-on` and `v-bind`:

```html
<!-- short for v-bind:href -->
<a :href="someURL"></a>

<!-- short for v-on:click -->
<button @click="onClick"></button>
```

When used on a child component, `v-on` listens for custom events and `v-bind` can be used to bind props. The shorthands using child components very succinct:

```html
<item-list
:items="items"
@ready="onItemsReady"
@update="onItemsUpdate">
</item-list>
```

### API Cleanup

The overall goal for Vue.js 1.0 is to make it suitable for larger projects. This is why there are many API deprecations. Except for ones that are barely used, the most common reason for a deprecation is that the feature leads to patterns that damages maintainability. Specifically, we are deprecating features that make it hard to maintain and refactor a component in isolation without affecting the rest of the project.

For example, the default asset resolution in 0.12 has implicit fallbacks to parents in the component tree. This makes the assets available to a component non-deterministic and subject how it is used at runtime. In 1.0, all assets are now resolved in strict mode and there are no longer implicit fallbacks to parent. The `inherit` option is also removed, because it too often leads to tightly coupled components that are hard to refactor.

### Faster Initial Rendering

1.0 replaces the old `v-repeat` directive with `v-for`. In addition to providing the same functionality and more intuitive scoping, `v-for` provides up to **100%** initial render performance boost when rendering large lists and tables!

### More Powerful Tooling

There are also exciting things going on outside of Vue.js core - [vue-loader](https://github.com/vuejs/vue-loader) and [vueify](https://github.com/vuejs/vueify) have received major upgrades including:

- Hot component reloading. When a `*.vue` component is edited, all of its active instances are hot swapped without reloading the page. This means when making small changes, e.g. tweaking the styles or the template, your app doesn't need to fully reload; the state of the app the swapped component can be preserved, drastically improving the development experience.

- Scoped CSS. By simply adding a `scoped` attribute to your `*.vue` component style tags, the component's template and final generated CSS are magically re-written to ensure a component's styles are only applied to its own elements. Most importantly, the styles specified in a parent component **does not** leak down to child components nested within it.

- ES2015 by default. JavaScript is evolving. You can write much cleaner and expressive code using the latest syntax. `vue-loader` and `vueify` now transpiles the JavaScript in your `*.vue` components out of the box, without the need for extra setup. Write future JavaScript today!

Combined with [vue-router](https://github.com/vuejs/vue-router), Vue.js is now more than a library - it provides a solid foundation for building complex SPAs.

### What's Next?

As what 1.0.0 usually suggests, the core API will stay stable for the foreseeable future and the library is ready for production use. Future development will focus on:

1. Improving `vue-router` and make it production ready.

2. Streamlining the developer experience, e.g. a better devtool and a CLI for scaffolding Vue.js projects and components.

3. Providing more learning resources such as tutorials and examples.
Loading