Skip to content

Commit f10d5b3

Browse files
committed
Merge remote-tracking branch 'upstream/dev' into working
# Conflicts: # docs/en/advanced/data-fetching.md # docs/en/advanced/transitions.md # docs/en/api/route-object.md # docs/en/essentials/getting-started.md Signed-off-by: Bruno Lesieur <[email protected]>
2 parents 72693f0 + 42836cf commit f10d5b3

23 files changed

+763
-743
lines changed

.eslintrc

+7-7
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
{
22
"root": true,
3-
"parser": "babel-eslint",
4-
"extends": "vue",
5-
"plugins": ["flow-vars"],
6-
"rules": {
7-
"flow-vars/define-flow-type": 1,
8-
"flow-vars/use-flow-type": 1
9-
}
3+
"plugins": [
4+
"flowtype"
5+
],
6+
"extends": [
7+
"plugin:vue-libs/recommended",
8+
"plugin:flowtype/recommended"
9+
]
1010
}

docs/en/advanced/data-fetching.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ export default {
4343
}
4444
},
4545
created () {
46-
// récupérer les données lorsque la vue est créée et
46+
// récupérer les données lorsque la vue est créée et
4747
// que les données sont déjà observées
4848
this.fetchData()
4949
},

docs/en/advanced/lazy-loading.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@
22

33
When building apps with a bundler, the JavaScript bundle can become quite large, and thus affect the page load time. It would be more efficient if we can split each route's components into a separate chunk, and only load them when the route is visited.
44

5-
Combining Vue's [async component feature](http://vuejs.org/guide/components.html#Async-Components) and Webpack's [code splitting feature](https://webpack.js.org/guides/code-splitting-require/), it's trivially easy to
5+
Combining Vue's [async component feature](http://vuejs.org/guide/components.html#Async-Components) and webpack's [code splitting feature](https://webpack.js.org/guides/code-splitting-require/), it's trivially easy to
66
lazy-load route components.
77

88
All we need to do is define our route components as async components:
99

1010
``` js
1111
const Foo = resolve => {
12-
// require.ensure is Webpack's special syntax for a code-split point.
12+
// `require.ensure` is webpack's special syntax for a code-split point.
1313
require.ensure(['./Foo.vue'], () => {
1414
resolve(require('./Foo.vue'))
1515
})
@@ -42,4 +42,4 @@ const Bar = r => require.ensure([], () => r(require('./Bar.vue')), 'group-foo')
4242
const Baz = r => require.ensure([], () => r(require('./Baz.vue')), 'group-foo')
4343
```
4444

45-
Webpack will group any async module with the same chunk name into the same async chunk - this also means we don't need to explicitly list dependencies for `require.ensure` anymore (thus passing an empty array).
45+
webpack will group any async module with the same chunk name into the same async chunk - this also means we don't need to explicitly list dependencies for `require.ensure` anymore (thus passing an empty array).

docs/en/api/route-object.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ L'objet `Route` peut être trouvé à plusieurs endroits :
4949
- type : `Object`
5050

5151
Un objet qui contient des pairs clé/valeur de la requête au format d'une chaîne de caractères. Par exemple, pour un chemin `/foo?user=1`, on aura `$route.query.user == 1`. S'il n'y a pas de requête, alors la valeur sera un objet vide.
52-
52+
5353
- **$route.hash**
5454

5555
- type : `string`

docs/en/api/router-link.md

+4-4
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,10 @@
2626
<!-- renders to -->
2727
<a href="home">Home</a>
2828

29-
<!-- javascript expression using v-bind -->
29+
<!-- javascript expression using `v-bind` -->
3030
<router-link v-bind:to="'home'">Home</router-link>
3131

32-
<!-- Omitting v-bind is fine, just as binding any other prop -->
32+
<!-- Omitting `v-bind` is fine, just as binding any other prop -->
3333
<router-link :to="'home'">Home</router-link>
3434

3535
<!-- same as above -->
@@ -38,7 +38,7 @@
3838
<!-- named route -->
3939
<router-link :to="{ name: 'user', params: { userId: 123 }}">User</router-link>
4040

41-
<!-- with query, resulting in /register?plan=private -->
41+
<!-- with query, resulting in `/register?plan=private` -->
4242
<router-link :to="{ path: 'register', query: { plan: 'private' }}">Register</router-link>
4343
```
4444

@@ -103,7 +103,7 @@
103103
One consequence of this is that `<router-link to="/">` will be active for every route! To force the link into "exact match mode", use the `exact` prop:
104104

105105
``` html
106-
<!-- this link will only be active at / -->
106+
<!-- this link will only be active at `/` -->
107107
<router-link to="/" exact>
108108
```
109109

docs/en/essentials/getting-started.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ Créer une application monopage avec Vue.js + vue-router est vraiment simple. Av
3030
### JavaScript
3131

3232
``` js
33-
// 0. Si vous utilisez un système de module (ex : via vue-cli), il faut importer Vue et VueRouter et ensuite appeler Vue.use(VueRouter).
33+
// 0. Si vous utilisez un système de module (ex : via vue-cli), il faut importer Vue et VueRouter et ensuite appeler `Vue.use(VueRouter)`.
3434

3535
// 1. Définissez les composants de route.
3636
// Ces derniers peuvent être importés depuis d'autre fichier

docs/ja/advanced/lazy-loading.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
バンドラーを使ってアプリケーションを構築している時、バンドルされる JavaScript が非常に大きいものになり得ます。結果的にページのロード時間に影響を与えてしまいます。もし各ルートコンポーネントごとに別々のチャンクにして、訪れたルートの時だけロードできればより効率的でしょう。
44

5-
Vue の [非同期コンポーネント機能](http://vuejs.org/guide/components.html#Async-Components) と Webpack の [コード分割機能](https://webpack.js.org/guides/code-splitting-require/) を組み合わせることでとても簡単に遅延ロードするルートコンポーネントができます。
5+
Vue の [非同期コンポーネント機能](http://jp.vuejs.org/guide/components.html#非同期コンポーネント) と Webpack の [コード分割機能](https://webpack.js.org/guides/code-splitting-require/) を組み合わせることでとても簡単に遅延ロードするルートコンポーネントができます。
66

77
必要なことは非同期のルートコンポーネントを定義するだけです。
88

docs/ja/advanced/transitions.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
</transition>
99
```
1010

11-
[`<transition>` についての全て](http://vuejs.org/guide/transitions.html) はここでも動作します。
11+
[`<transition>` についての全て](http://jp.vuejs.org/guide/transitions.html) はここでも動作します。
1212

1313
### ルート単位のトランジション
1414

docs/ja/essentials/dynamic-matching.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ const router = new VueRouter({
1717

1818
これで `/user/foo``/user/bar` などの URL 両方とも同じルートにマッチします。
1919

20-
動的セグメントはコロン `:` を使って表されます。ルートがマッチした時、この動的セグメントの値は全てのコンポーネント内で `this.$route.params` として利用可能になります。したがって、現在の `User' のテンプレートを次のように更新することで現在のユーザー ID を表示することができます。
20+
動的セグメントはコロン `:` を使って表されます。ルートがマッチした時、この動的セグメントの値は全てのコンポーネント内で `this.$route.params` として利用可能になります。したがって、現在の `User` のテンプレートを次のように更新することで現在のユーザー ID を表示することができます。
2121

2222
``` js
2323
const User = {

docs/ru/advanced/data-fetching.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ export default {
5454
fetchData () {
5555
this.error = this.post = null
5656
this.loading = true
57-
// замените здесь getPost используемым методом получения данных / доступа к API
57+
// замените здесь `getPost` используемым методом получения данных / доступа к API
5858
getPost(this.$route.params.id, (err, post) => {
5959
this.loading = false
6060
if (err) {

docs/ru/advanced/lazy-loading.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@
22

33
При использовании модульного сборщика, результирующая JavaScript-сборка может оказаться довольно большой, что негативно сказывается на времени загрузки страницы. В некоторых случаях было бы эффективнее разделить компоненты каждого пути на отдельные минисборки, и загружать их только при переходе к соответствующему пути.
44

5-
Совместное использование [асинхронной загрузки компонентов](https://ru.vuejs.org/v2/guide/components.html#Асинхронные-компоненты) Vue и [разделения кода](https://webpack.js.org/guides/code-splitting-require/) WebPack делает реализацию ленивой загрузки компонентов в зависимости от путей тривиальной.
5+
Совместное использование [асинхронной загрузки компонентов](https://ru.vuejs.org/v2/guide/components.html#Асинхронные-компоненты) Vue и [разделения кода](https://webpack.js.org/guides/code-splitting-require/) Webpack делает реализацию ленивой загрузки компонентов в зависимости от путей тривиальной.
66

77
Всё, что требуется — определить компоненты путей как асинхронные:
88

99
``` js
1010
const Foo = resolve => {
11-
// require.ensure — это специальный синтаксис Webpack'а для определения точки разделения кода.
11+
// `require.ensure` — это специальный синтаксис Webpack'а для определения точки разделения кода.
1212
require.ensure(['./Foo.vue'], () => {
1313
resolve(require('./Foo.vue'))
1414
})

docs/ru/advanced/transitions.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ const Bar = {
4444
```
4545

4646
``` js
47-
// затем, в родительском компоненте, будем следить за переменной $route,
47+
// затем, в родительском компоненте, будем следить за переменной `$route`,
4848
// чтобы определить, какой анимационный переход применить
4949

5050
watch: {

docs/ru/api/route-object.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
``` js
1818
router.beforeEach((to, from, next) => {
19-
// как to так и from являются объектами пути
19+
// как `to` так и `from` являются объектами пути
2020
})
2121
```
2222

@@ -25,7 +25,7 @@
2525
``` js
2626
const router = new VueRouter({
2727
scrollBehavior (to, from, savedPosition) {
28-
// как to так и from являются объектами пути
28+
// как `to` так и `from` являются объектами пути
2929
}
3030
})
3131
```

docs/ru/api/router-link.md

+4-4
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,10 @@
2727
<!-- результат рендеринга -->
2828
<a href="home">Home</a>
2929

30-
<!-- javascript-выражение через v-bind -->
30+
<!-- javascript-выражение через `v-bind` -->
3131
<router-link v-bind:to="'home'">Home</router-link>
3232

33-
<!-- Можно использовать сокращенную запись v-bind -->
33+
<!-- Можно использовать сокращенную запись `v-bind` -->
3434
<router-link :to="'home'">Home</router-link>
3535

3636
<!-- даст тот же результат -->
@@ -39,7 +39,7 @@
3939
<!-- с использованием именованного пути -->
4040
<router-link :to="{ name: 'user', params: { userId: 123 }}">User</router-link>
4141

42-
<!-- с использованием строки запроса, получим /register?plan=private -->
42+
<!-- с использованием строки запроса, получим `/register?plan=private` -->
4343
<router-link :to="{ path: 'register', query: { plan: 'private' }}">Register</router-link>
4444
```
4545

@@ -100,7 +100,7 @@
100100
Одним из следствий этого подхода является тот факт, что корневая ссылка `<router-link to="/">` будет считаться активной всегда. Чтобы заставить ссылку считаться активной только при полном совпадении, используйте входной параметр `exact`:
101101

102102
``` html
103-
<!-- эта ссылка будет активной только для корневого пути / -->
103+
<!-- эта ссылка будет активной только для корневого пути `/` -->
104104
<router-link to="/" exact>
105105
```
106106

docs/ru/essentials/getting-started.md

+5-5
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
55
Создать одностраничное приложение используя Vue.js и Vue-router очень просто. Используя Vue.js, мы уже компонуем своё приложение из компонентов. Добавляя Vue-router, мы просто сопоставляем компонентам пути, и указываем, где именно их отображать. Вот простой пример:
66

7-
> Все примеры используют standalone-сборку Vue, которая позволяет использовать парсинг шаблонов. Подробнее о разнице сборок можно почитать [в документации к Vue.js](https://ru.vuejs.org/v2/guide/installation.html#Объяснение-различных-сборок).
7+
> Все примеры используют полную сборку Vue, которая позволяет использовать парсинг шаблонов. Подробнее о разнице сборок можно почитать [в документации к Vue.js](https://ru.vuejs.org/v2/guide/installation.html#Объяснение-различных-сборок).
88
99
### HTML
1010

@@ -17,7 +17,7 @@
1717
<p>
1818
<!-- используйте компонент router-link для создания ссылок -->
1919
<!-- входной параметр `to` определяет путь для перехода -->
20-
<!-- <router-link> по умолчанию преобразуется в тег `<a>` -->
20+
<!-- `<router-link>` по умолчанию преобразуется в тег `<a>` -->
2121
<router-link to="/foo">Go to Foo</router-link>
2222
<router-link to="/bar">Go to Bar</router-link>
2323
</p>
@@ -30,7 +30,7 @@
3030

3131
``` js
3232
// 0. При использовании модульной системы (напр. vue-cli),
33-
// импортируйте Vue и VueRouter и затем вызовите Vue.use(VueRouter)
33+
// импортируйте Vue и VueRouter и затем вызовите `Vue.use(VueRouter)`
3434

3535
// 1. Определение используемых компонентов
3636
// Они могут быть импортированы из внешних файлов
@@ -39,7 +39,7 @@ const Bar = { template: '<div>bar</div>' }
3939

4040
// 2. Определение путей
4141
// Каждый путь должен указывать на компонент
42-
// "Компонентом" может быть как созданный через Vue.extend()
42+
// "Компонентом" может быть как созданный через `Vue.extend()`
4343
// полноценный конструктор, так и просто объект с настройками компонента
4444
// Вложенные пути будут рассмотрены далее.
4545
const routes = [
@@ -50,7 +50,7 @@ const routes = [
5050
// 3. Создаём инстанс роутера с опцией `routes`
5151
// Можно передать и другие опции, но пока не будем усложнять
5252
const router = new VueRouter({
53-
routes // сокращение от routes: routes
53+
routes // сокращение от `routes: routes`
5454
})
5555

5656
// 4. Создаём и монтируем корневой инстанс Vue нашего приложения.

examples/lazy-loading/app.js

+5-6
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,11 @@ const Foo = () => import('./Foo.vue')
3030
// const Foo = resolve => require(['./Foo.vue'], resolve)
3131

3232
// If you want to group a number of components that belong to the same
33-
// nested route in the same async chunk, you will need to use
34-
// require.ensure. The 3rd argument is the chunk name they belong to -
35-
// modules that belong to the same chunk should use the same chunk name.
36-
// For more details see https://webpack.js.org/guides/code-splitting-require/
37-
const Bar = resolve => require.ensure([], () => resolve(require('./Bar.vue')), '/bar')
38-
const Baz = resolve => require.ensure([], () => resolve(require('./Baz.vue')), '/bar')
33+
// nested route in the same async chunk, you can use a special comment
34+
// to indicate a chunk name for the imported module. (note this requires
35+
// webpack 2.4.0+)
36+
const Bar = () => import(/* webpackChunkName: "/bar" */ './Bar.vue')
37+
const Baz = () => import(/* webpackChunkName: "/bar" */ './Baz.vue')
3938

4039
const router = new VueRouter({
4140
mode: 'history',

package.json

+3-4
Original file line numberDiff line numberDiff line change
@@ -49,9 +49,8 @@
4949
"css-loader": "^0.28.0",
5050
"es6-promise": "^4.0.5",
5151
"eslint": "^3.0.1",
52-
"eslint-config-vue": "^2.0.1",
53-
"eslint-plugin-flow-vars": "^0.5.0",
54-
"eslint-plugin-vue": "^2.0.1",
52+
"eslint-plugin-flowtype": "^2.34.0",
53+
"eslint-plugin-vue-libs": "^1.2.0",
5554
"express": "^4.14.0",
5655
"express-urlrewrite": "^1.2.0",
5756
"flow-bin": "^0.45.0",
@@ -61,7 +60,7 @@
6160
"nightwatch": "^0.9.5",
6261
"nightwatch-helpers": "^1.0.0",
6362
"path-to-regexp": "^1.5.3",
64-
"phantomjs-prebuilt": "^2.1.7",
63+
"phantomjs-prebuilt": "^2.1.14",
6564
"rollup": "^0.41.4",
6665
"rollup-plugin-buble": "^0.15.0",
6766
"rollup-plugin-commonjs": "^8.0.2",

src/history/html5.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,10 @@ export class HTML5History extends History {
1717
}
1818

1919
window.addEventListener('popstate', e => {
20+
const current = this.current
2021
this.transitionTo(getLocation(this.base), route => {
2122
if (expectScroll) {
22-
handleScroll(router, route, this.current, true)
23+
handleScroll(router, route, current, true)
2324
}
2425
})
2526
})

src/util/query.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ export function stringifyQuery (obj: Dictionary<string>): string {
7777

7878
if (Array.isArray(val)) {
7979
const result = []
80-
val.slice().forEach(val2 => {
80+
val.forEach(val2 => {
8181
if (val2 === undefined) {
8282
return
8383
}

test/e2e/specs/active-links.js

+2
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,11 @@ module.exports = {
4343
})
4444
exactActiveA.forEach(i => {
4545
browser.assert.cssClassPresent(`li:nth-child(${i}) a`, 'router-link-exact-active')
46+
.assert.cssClassPresent(`li:nth-child(${i}) a`, 'router-link-active')
4647
})
4748
exactActiveLI && exactActiveLI.forEach(i => {
4849
browser.assert.cssClassPresent(`li:nth-child(${i})`, 'router-link-exact-active')
50+
.assert.cssClassPresent(`li:nth-child(${i})`, 'router-link-active')
4951
})
5052
}
5153
}

types/router.d.ts

+1
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ export interface RouterOptions {
4949
mode?: RouterMode;
5050
base?: string;
5151
linkActiveClass?: string;
52+
linkExactActiveClass?: string;
5253
parseQuery?: (query: string) => Object;
5354
stringifyQuery?: (query: Object) => string;
5455
scrollBehavior?: (

types/test/index.ts

+1
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ const router = new VueRouter({
4141
mode: "history",
4242
base: "/",
4343
linkActiveClass: "active",
44+
linkExactActiveClass: "exact-active",
4445
scrollBehavior: (to, from, savedPosition) => {
4546
if (from.path === "/") {
4647
return { selector: "#app" };

0 commit comments

Comments
 (0)