From cbceb63f4399b9e062840df85de3f47372438066 Mon Sep 17 00:00:00 2001 From: Jinjiang Date: Fri, 3 Apr 2020 00:34:30 +0800 Subject: [PATCH 1/6] linted cookbook/serverless-blog.md --- src/v2/cookbook/serverless-blog.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/v2/cookbook/serverless-blog.md b/src/v2/cookbook/serverless-blog.md index 93780fb89..ad74509c7 100644 --- a/src/v2/cookbook/serverless-blog.md +++ b/src/v2/cookbook/serverless-blog.md @@ -39,7 +39,7 @@ import Butter from 'buttercms'; const butter = Butter('your_api_token'); ``` -使用 CDN: +使用 CDN: ```html @@ -302,4 +302,4 @@ created() { ## 总结 -差不多就是这些了!现在你已经在自己的应用中拥有了一个可以正常工作的 CMS 博客。我们希望这份教程可以帮助你,使你的 Vue.js 开发体验更有乐趣 :) +差不多就是这些了!现在你已经在自己的应用中拥有了一个可以正常工作的 CMS 博客。我们希望这份教程可以帮助你,使你的 Vue.js 开发体验更有乐趣 🙂 From 151fa30758bf3d5934075ac4e48a9fd9267d4d7a Mon Sep 17 00:00:00 2001 From: Jinjiang Date: Sat, 4 Apr 2020 13:47:38 +0800 Subject: [PATCH 2/6] linted guide/migration.md --- src/v2/guide/migration.md | 136 +++++++++++++++++++------------------- 1 file changed, 68 insertions(+), 68 deletions(-) diff --git a/src/v2/guide/migration.md b/src/v2/guide/migration.md index e7eee9ead..bbe3b794c 100644 --- a/src/v2/guide/migration.md +++ b/src/v2/guide/migration.md @@ -30,15 +30,15 @@ order: 701 - 取决于你使用了哪些旧有的特性。大部分可以通过查找和替换 (find-and-replace) 来实现升级,但有一些可能还是要花点时间。如果你没有遵循最佳实践,Vue 2.0 会尽力强迫你去遵循。这有利于项目的长期运行,但也可能意味着重大重构 (尽管有些需要重构的部分可能已经过时)。 -> 如果我升级到到 Vue 2 ,我还必须同时升级 Vuex 和 Vue Router? +> 如果我升级到到 Vue 2,我还必须同时升级 Vuex 和 Vue Router? 只有 Vue Router 2 与 Vue 2 保持兼容,所以 Vue Router 是需要升级的,你必须遵循 [Vue Router 迁移方式](migration-vue-router.html)来处理。幸运的是,大多数应用没有很多 router 相关代码,所以迁移可能不会超过一个小时。 -对于 Vuex ,版本 0.8+ 与 Vue 2 保持兼容,所以部分不必强制升级。可以促使你立即升级的唯一理由,是你想要使用那些 Vuex 2 中新的高级特性,比如模块 (modules) 和减少的样板文件 (reduced boilerplate)。 +对于 Vuex,版本 0.8+ 与 Vue 2 保持兼容,所以部分不必强制升级。可以促使你立即升级的唯一理由,是你想要使用那些 Vuex 2 中新的高级特性,比如模块 (modules) 和减少的样板文件 (reduced boilerplate)。 ## 模板 -### 片段实例 移除 +### 片段实例移除 每个组件必须只有一个根元素。不再允许片段实例,如果你有这样的模板: @@ -173,9 +173,9 @@ mounted: function () { ## `v-for` -### `v-for` 遍历数组时的参数顺序 变更 +### `v-for` 遍历数组时的参数顺序变更 -当包含 `index` 时,之前遍历数组时的参数顺序是 `(index, value)`。现在是 `(value, index)` ,来和 JavaScript 的原生数组方法 (例如 `forEach` 和 `map`) 保持一致。 +当包含 `index` 时,之前遍历数组时的参数顺序是 `(index, value)`。现在是 `(value, index)`,来和 JavaScript 的原生数组方法 (例如 `forEach` 和 `map`) 保持一致。 {% raw %}
@@ -184,7 +184,7 @@ mounted: function () {
{% endraw %} -### `v-for` 遍历对象时的参数顺序 变更 +### `v-for` 遍历对象时的参数顺序变更 当包含 property 名称/key 时,之前遍历对象的参数顺序是 `(name, value)`。现在是 `(value, name)`,来和常见的对象迭代器 (例如 lodash) 保持一致。 @@ -198,6 +198,7 @@ mounted: function () { ### `$index` and `$key` 移除 已经移除了 `$index` 和 `$key` 这两个隐式声明变量,以便在 `v-for` 中显式定义。这可以使没有太多 Vue 开发经验的开发者更好地阅读代码,并且在处理嵌套循环时也能产生更清晰的行为。 + {% raw %}

升级方式

@@ -226,7 +227,7 @@ mounted: function () {
{% endraw %} -### `v-for` 范围值 变更 +### `v-for` 范围值变更 之前,`v-for="number in 10"` 的 `number` 从 0 开始到 9 结束,现在从 1 开始,到 10 结束。 @@ -239,7 +240,7 @@ mounted: function () { ## Props -### `coerce` Prop 的参数 移除 +### `coerce` Prop 的参数移除 如果需要检查 prop 的值,创建一个内部的 computed 值,而不再在 props 内部去定义,例如: @@ -283,7 +284,7 @@ computed: { {% endraw %} -### `twoWay` Prop 的参数 移除 +### `twoWay` Prop 的参数移除 Props 现在只能单向传递。为了对父组件产生反向影响,子组件需要显式地传递一个事件而不是依赖于隐式地双向绑定。详见: @@ -298,7 +299,7 @@ Props 现在只能单向传递。为了对父组件产生反向影响,子组 {% endraw %} -### `v-bind` 的 `.once`和`.sync` 修饰符 移除 +### `v-bind` 的 `.once` 和 `.sync` 修饰符移除 Props 现在只能单向传递。为了对父组件产生反向影响,子组件需要显式地传递一个事件而不是依赖于隐式地双向绑定。详见: @@ -315,7 +316,7 @@ Props 现在只能单向传递。为了对父组件产生反向影响,子组 ### 修改 Props 弃用 -组件内修改 prop 是反模式 (不推荐的) 的。比如,先声明一个 prop ,然后在组件中通过 `this.myProp = 'someOtherValue'` 改变 prop 的值。根据渲染机制,当父组件重新渲染时,子组件的内部 prop 值也将被覆盖。 +组件内修改 prop 是反模式 (不推荐的) 的。比如,先声明一个 prop,然后在组件中通过 `this.myProp = 'someOtherValue'` 改变 prop 的值。根据渲染机制,当父组件重新渲染时,子组件的内部 prop 值也将被覆盖。 大多数情况下,改变 prop 值可以用以下选项替代: @@ -331,7 +332,7 @@ Props 现在只能单向传递。为了对父组件产生反向影响,子组 ### 根实例的 Props 替换 -对于一个根实例来说 (比如:用 `new Vue({ ... })` 创建的实例),只能用 `propsData` 而不是 `props` 。 +对于一个根实例来说 (比如:用 `new Vue({ ... })` 创建的实例),只能用 `propsData` 而不是 `props`。 {% raw %}
@@ -380,9 +381,9 @@ methods: { ## Built-In 指令 -### `v-bind` 真/假值 变更 +### `v-bind` 真/假值变更 -在2.0中使用 `v-bind` 时,只有 `null`, `undefined`,和 `false` 被看作是假。这意味着,`0` 和空字符串将被作为真值渲染。比如 `v-bind:draggable="''"` 将被渲染为 `draggable="true"`。 +在 2.0 中使用 `v-bind` 时,只有 `null`,`undefined`,和 `false` 被看作是假。这意味着,`0` 和空字符串将被作为真值渲染。比如 `v-bind:draggable="''"` 将被渲染为 `draggable="true"`。 对于枚举属性,除了以上假值之外,字符串 `"false"` 也会被渲染为 `attr="false"`。 @@ -395,7 +396,7 @@ methods: {
{% endraw %} -### 用 `v-on` 监听原生事件 变更 +### 用 `v-on` 监听原生事件变更 现在在组件上使用 `v-on` 只会监听自定义事件 (组件用 `$emit` 触发的事件)。如果要监听根元素的原生事件,可以使用 `.native` 修饰符,比如: @@ -410,9 +411,9 @@ methods: { {% endraw %} -### 带有 `debounce` 的 `v-model`移除 +### 带有 `debounce` 的 `v-model` 移除 -Debouncing 曾经被用来控制 Ajax 请求及其它高耗任务的频率。Vue 中`v-model`的 `debounce` 属性参数使得在一些简单情况下非常容易实现这种控制。但实际上,这是控制了**状态更新**的频率,而不是控制高耗时任务本身。这是个微小的差别,但是会随着应用增长而显现出局限性。 +Debouncing 曾经被用来控制 Ajax 请求及其它高耗任务的频率。Vue 中 `v-model` 的 `debounce` 属性参数使得在一些简单情况下非常容易实现这种控制。但实际上,这是控制了**状态更新**的频率,而不是控制高耗时任务本身。这是个微小的差别,但是会随着应用增长而显现出局限性。 例如在设计一个搜索提示时的局限性: @@ -460,7 +461,7 @@ new Vue({ {% endraw %} -使用 `debounce` 参数,便无法观察 "Typing" 的状态。因为无法对输入状态进行实时检测。然而,通过将 `debounce` 与 Vue 解耦,可以仅仅只延迟我们想要控制的操作,从而避开这些局限性: +使用 `debounce` 参数,便无法观察“Typing”的状态。因为无法对输入状态进行实时检测。然而,通过将 `debounce` 与 Vue 解耦,可以仅仅只延迟我们想要控制的操作,从而避开这些局限性: ``` html

We're assuming the port to be `8080` here. If it's not the case (for instance, if `8080` has been taken and Vue CLI automatically picks another port for you), just modify the configuration accordingly.

-点击在 Activity Bar 里的 Debugger 图标来到 Debug 视图,然后点击那个齿轮图标来配置一个 `launch.json` 的文件,选择 **Chrome/Firefox: Launch** 环境。然后将生成的 `launch.json` 的内容替换成为相应的配置: +点击在 Activity Bar 里的 Debugger 图标来到 Debug 视图,然后点击那个齿轮图标来配置一个 `launch.json` 的文件,选择 **Chrome/Firefox:Launch** 环境。然后将生成的 `launch.json` 的内容替换成为相应的配置: ![添加 Chrome 配置](/images/config_add.png) @@ -91,7 +91,7 @@ module.exports = { npm run serve ``` -3. 来到 Debug 视图,选择 **'vuejs: chrome/firefox'** 配置,然后按 F5 或点击那个绿色的 play 按钮。 +3. 来到 Debug 视图,选择**‘vuejs:chrome/firefox’**配置,然后按 F5 或点击那个绿色的 play 按钮。 4. 随着一个新的浏览器实例打开 `http://localhost:8080`,你的断点现在应该被命中了。 From 890d7adbfc43d7652ca0e644ef42f7f4dcd7c217 Mon Sep 17 00:00:00 2001 From: Jinjiang Date: Sat, 4 Apr 2020 13:55:20 +0800 Subject: [PATCH 6/6] linted style-guild/index.md --- src/v2/style-guide/index.md | 124 ++++++++++++++++++++++++++---------- 1 file changed, 92 insertions(+), 32 deletions(-) diff --git a/src/v2/style-guide/index.md b/src/v2/style-guide/index.md index 7d31b7da1..d759013b8 100644 --- a/src/v2/style-guide/index.md +++ b/src/v2/style-guide/index.md @@ -41,13 +41,14 @@ type: style-guide -### 组件名为多个单词 必要 +### 组件名为多个单词必要 **组件名应该始终是多个单词的,根组件 `App` 以及 ``、`` 之类的 Vue 内置组件除外。** 这样做可以避免跟现有的以及未来的 HTML 元素[相冲突](http://w3c.github.io/webcomponents/spec/custom/#valid-custom-element-name),因为所有的 HTML 元素名称都是单个单词的。 {% raw %}
{% endraw %} + #### 反例 ``` js @@ -65,6 +66,7 @@ export default { {% raw %}
{% endraw %} {% raw %}
{% endraw %} + #### 好例子 ``` js @@ -83,7 +85,7 @@ export default { -### 组件数据 必要 +### 组件数据必要 **组件的 `data` 必须是一个函数。** @@ -120,6 +122,7 @@ data: function () { {% raw %}{% endraw %} {% raw %}
{% endraw %} + #### 反例 ``` js @@ -140,6 +143,7 @@ export default { {% raw %}
{% endraw %} {% raw %}
{% endraw %} + #### 好例子 ``` js Vue.component('some-comp', { @@ -175,7 +179,7 @@ new Vue({ -### Prop 定义 必要 +### Prop 定义必要 **Prop 定义应该尽量详细。** @@ -196,6 +200,7 @@ new Vue({ {% raw %}{% endraw %} {% raw %}
{% endraw %} + #### 反例 ``` js @@ -205,6 +210,7 @@ props: ['status'] {% raw %}
{% endraw %} {% raw %}
{% endraw %} + #### 好例子 ``` js @@ -234,7 +240,7 @@ props: { -### 为 `v-for` 设置键值 必要 +### 为 `v-for` 设置键值必要 **总是用 `key` 配合 `v-for`。** @@ -275,6 +281,7 @@ data: function () { {% raw %}{% endraw %} {% raw %}
{% endraw %} + #### 反例 ``` html @@ -287,6 +294,7 @@ data: function () { {% raw %}
{% endraw %} {% raw %}
{% endraw %} + #### 好例子 ``` html @@ -303,7 +311,7 @@ data: function () { -### 避免 `v-if` 和 `v-for` 用在一起 必要 +### 避免 `v-if` 和 `v-for` 用在一起必要 **永远不要把 `v-if` 和 `v-for` 同时用在同一个元素上。** @@ -311,7 +319,7 @@ data: function () { - 为了过滤一个列表中的项目 (比如 `v-for="user in users" v-if="user.isActive"`)。在这种情形下,请将 `users` 替换为一个计算属性 (比如 `activeUsers`),让其返回过滤后的列表。 -- 为了避免渲染本应该被隐藏的列表 (比如 `v-for="user in users" v-if="shouldShowUsers"`)。这种情形下,请将 `v-if` 移动至容器元素上 (比如 `ul`, `ol`)。 +- 为了避免渲染本应该被隐藏的列表 (比如 `v-for="user in users" v-if="shouldShowUsers"`)。这种情形下,请将 `v-if` 移动至容器元素上 (比如 `ul`,`ol`)。 {% raw %}
@@ -407,6 +415,7 @@ computed: { {% raw %}
{% endraw %} {% raw %}
{% endraw %} + #### 反例 ``` html @@ -435,6 +444,7 @@ computed: { {% raw %}
{% endraw %} {% raw %}
{% endraw %} + #### 好例子 ``` html @@ -462,7 +472,7 @@ computed: { -### 为组件样式设置作用域 必要 +### 为组件样式设置作用域必要 **对于应用来说,顶级 `App` 组件和布局组件中的样式可以是全局的,但是其它所有组件都应该是有作用域的。** @@ -487,6 +497,7 @@ computed: { {% raw %}{% endraw %} {% raw %}
{% endraw %} + #### 反例 ``` html @@ -503,6 +514,7 @@ computed: { {% raw %}
{% endraw %} {% raw %}
{% endraw %} + #### 好例子 ``` html @@ -562,7 +574,7 @@ computed: { -### 私有属性名 必要 +### 私有属性名必要 **使用模块作用域保持不允许外部访问的函数的私有性。如果无法做到这一点,就始终为插件、混入等不考虑作为对外公共 API 的自定义私有属性使用 `$_` 前缀。并附带一个命名空间以回避和其它作者的冲突 (比如 `$_yourPluginName_`)。** @@ -582,6 +594,7 @@ Vue 使用 `_` 前缀来定义其自身的私有属性,所以使用相同的 {% raw %}{% endraw %} {% raw %}
{% endraw %} + #### 反例 ``` js @@ -631,6 +644,7 @@ var myGreatMixin = { {% raw %}
{% endraw %} {% raw %}
{% endraw %} + #### 好例子 ``` js @@ -670,13 +684,14 @@ export default myGreatMixin -### 组件文件 强烈推荐 +### 组件文件强烈推荐 **只要有能够拼接文件的构建系统,就把每个组件单独分成文件。** 当你需要编辑一个组件或查阅一个组件的用法时,可以更快速的找到它。 {% raw %}
{% endraw %} + #### 反例 ``` js @@ -691,6 +706,7 @@ Vue.component('TodoItem', { {% raw %}
{% endraw %} {% raw %}
{% endraw %} + #### 好例子 ``` @@ -708,13 +724,14 @@ components/ -### 单文件组件文件的大小写 强烈推荐 +### 单文件组件文件的大小写强烈推荐 **[单文件组件](../guide/single-file-components.html)的文件名应该要么始终是单词大写开头 (PascalCase),要么始终是横线连接 (kebab-case)。** 单词大写开头对于代码编辑器的自动补全最为友好,因为这使得我们在 JS(X) 和模板中引用组件的方式尽可能的一致。然而,混用文件命名方式有的时候会导致大小写不敏感的文件系统的问题,这也是横线连接命名同样完全可取的原因。 {% raw %}
{% endraw %} + #### 反例 ``` @@ -729,6 +746,7 @@ components/ {% raw %}
{% endraw %} {% raw %}
{% endraw %} + #### 好例子 ``` @@ -744,7 +762,7 @@ components/ -### 基础组件名 强烈推荐 +### 基础组件名强烈推荐 **应用特定样式和约定的基础组件 (也就是展示类的、无逻辑的或无状态的组件) 应该全部以一个特定的前缀开头,比如 `Base`、`App` 或 `V`。** @@ -790,6 +808,7 @@ components/ {% raw %}{% endraw %} {% raw %}
{% endraw %} + #### 反例 ``` @@ -801,6 +820,7 @@ components/ {% raw %}
{% endraw %} {% raw %}
{% endraw %} + #### 好例子 ``` @@ -827,13 +847,14 @@ components/ -### 单例组件名 强烈推荐 +### 单例组件名强烈推荐 **只应该拥有单个活跃实例的组件应该以 `The` 前缀命名,以示其唯一性。** 这不意味着组件只可用于一个单页面,而是*每个页面*只使用一次。这些组件永远不接受任何 prop,因为它们是为你的应用定制的,而不是它们在你的应用中的上下文。如果你发现有必要添加 prop,那就表明这实际上是一个可复用的组件,*只是目前*在每个页面里只使用一次。 {% raw %}
{% endraw %} + #### 反例 ``` @@ -844,6 +865,7 @@ components/ {% raw %}
{% endraw %} {% raw %}
{% endraw %} + #### 好例子 ``` @@ -855,7 +877,7 @@ components/ -### 紧密耦合的组件名 强烈推荐 +### 紧密耦合的组件名强烈推荐 **和父组件紧密耦合的子组件应该以父组件名作为前缀命名。** @@ -898,6 +920,7 @@ components/ {% raw %}{% endraw %} {% raw %}
{% endraw %} + #### 反例 ``` @@ -915,6 +938,7 @@ components/ {% raw %}
{% endraw %} {% raw %}
{% endraw %} + #### 好例子 ``` @@ -933,7 +957,7 @@ components/ -### 组件名中的单词顺序 强烈推荐 +### 组件名中的单词顺序强烈推荐 **组件名应该以高级别的 (通常是一般化描述的) 单词开头,以描述性的修饰词结尾。** @@ -991,6 +1015,7 @@ components/ {% raw %}{% endraw %} {% raw %}
{% endraw %} + #### 反例 ``` @@ -1005,6 +1030,7 @@ components/ {% raw %}
{% endraw %} {% raw %}
{% endraw %} + #### 好例子 ``` @@ -1020,7 +1046,7 @@ components/ -### 自闭合组件 强烈推荐 +### 自闭合组件强烈推荐 **在[单文件组件](../guide/single-file-components.html)、字符串模板和 [JSX](../guide/render-function.html#JSX) 中没有内容的组件应该是自闭合的——但在 DOM 模板里永远不要这样做。** @@ -1029,6 +1055,7 @@ components/ 不幸的是,HTML 并不支持自闭合的自定义元素——只有[官方的“空”元素](https://www.w3.org/TR/html/syntax.html#void-elements)。所以上述策略仅适用于进入 DOM 之前 Vue 的模板编译器能够触达的地方,然后再产出符合 DOM 规范的 HTML。 {% raw %}
{% endraw %} + #### 反例 ``` html @@ -1043,6 +1070,7 @@ components/ {% raw %}
{% endraw %} {% raw %}
{% endraw %} + #### 好例子 ``` html @@ -1058,7 +1086,7 @@ components/ -### 模板中的组件名大小写 强烈推荐 +### 模板中的组件名大小写强烈推荐 **对于绝大多数项目来说,在[单文件组件](../guide/single-file-components.html)和字符串模板中组件名应该总是 PascalCase 的——但是在 DOM 模板中总是 kebab-case 的。** @@ -1073,6 +1101,7 @@ PascalCase 相比 kebab-case 有一些优势: 还请注意,如果你已经是 kebab-case 的重度用户,那么与 HTML 保持一致的命名约定且在多个项目中保持相同的大小写规则就可能比上述优势更为重要了。在这些情况下,**在所有的地方都使用 kebab-case 同样是可以接受的。** {% raw %}
{% endraw %} + #### 反例 ``` html @@ -1092,6 +1121,7 @@ PascalCase 相比 kebab-case 有一些优势: {% raw %}
{% endraw %} {% raw %}
{% endraw %} + #### 好例子 ``` html @@ -1114,7 +1144,7 @@ PascalCase 相比 kebab-case 有一些优势: -### JS/JSX 中的组件名大小写 强烈推荐 +### JS/JSX 中的组件名大小写强烈推荐 **JS/[JSX](../guide/render-function.html#JSX) 中的组件名应该始终是 PascalCase 的,尽管在较为简单的应用中只使用 `Vue.component` 进行全局组件注册时,可以使用 kebab-case 字符串。** @@ -1131,9 +1161,11 @@ PascalCase 相比 kebab-case 有一些优势: - 全局组件很少被 JavaScript 引用,所以遵守 JavaScript 的命名约定意义不大。 - 这些应用往往包含许多 DOM 内的模板,这种情况下是[**必须**使用 kebab-case](#模板中的组件名大小写-强烈推荐) 的。 + {% raw %}{% endraw %} {% raw %}
{% endraw %} + #### 反例 ``` js @@ -1162,6 +1194,7 @@ export default { {% raw %}
{% endraw %} {% raw %}
{% endraw %} + #### 好例子 ``` js @@ -1190,13 +1223,14 @@ export default { -### 完整单词的组件名 强烈推荐 +### 完整单词的组件名强烈推荐 **组件名应该倾向于完整单词而不是缩写。** 编辑器中的自动补全已经让书写长命名的代价非常之低了,而其带来的明确性却是非常宝贵的。不常用的缩写尤其应该避免。 {% raw %}
{% endraw %} + #### 反例 ``` @@ -1207,6 +1241,7 @@ components/ {% raw %}
{% endraw %} {% raw %}
{% endraw %} + #### 好例子 ``` @@ -1218,13 +1253,14 @@ components/ -### Prop 名大小写 强烈推荐 +### Prop 名大小写强烈推荐 **在声明 prop 的时候,其命名应该始终使用 camelCase,而在模板和 [JSX](../guide/render-function.html#JSX) 中应该始终使用 kebab-case。** 我们单纯的遵循每个语言的约定。在 JavaScript 中更自然的是 camelCase。而在 HTML 中则是 kebab-case。 {% raw %}
{% endraw %} + #### 反例 ``` js @@ -1236,9 +1272,11 @@ props: { {% codeblock lang:html %} {% endcodeblock %} + {% raw %}
{% endraw %} {% raw %}
{% endraw %} + #### 好例子 ``` js @@ -1250,17 +1288,19 @@ props: { {% codeblock lang:html %} {% endcodeblock %} + {% raw %}
{% endraw %} -### 多个 attribute 的元素 强烈推荐 +### 多个 attribute 的元素强烈推荐 **多个 attribute 的元素应该分多行撰写,每个 attribute 一行。** 在 JavaScript 中,用多行分隔对象的多个属性是很常见的最佳实践,因为这样更易读。模板和 [JSX](../guide/render-function.html#JSX) 值得我们做相同的考虑。 {% raw %}
{% endraw %} + #### 反例 ``` html @@ -1273,6 +1313,7 @@ props: { {% raw %}
{% endraw %} {% raw %}
{% endraw %} + #### 好例子 ``` html @@ -1293,13 +1334,14 @@ props: { -### 模板中简单的表达式 强烈推荐 +### 模板中简单的表达式强烈推荐 **组件模板应该只包含简单的表达式,复杂的表达式则应该重构为计算属性或方法。** 复杂表达式会让你的模板变得不那么声明式。我们应该尽量描述应该出现的*是什么*,而非*如何*计算那个值。而且计算属性和方法使得代码可以重用。 {% raw %}
{% endraw %} + #### 反例 ``` html @@ -1312,6 +1354,7 @@ props: { {% raw %}
{% endraw %} {% raw %}
{% endraw %} + #### 好例子 ``` html @@ -1333,7 +1376,7 @@ computed: { -### 简单的计算属性 强烈推荐 +### 简单的计算属性强烈推荐 **应该把复杂计算属性分割为尽可能多的更简单的属性。** @@ -1363,6 +1406,7 @@ computed: { {% raw %}{% endraw %} {% raw %}
{% endraw %} + #### 反例 ``` js @@ -1379,6 +1423,7 @@ computed: { {% raw %}
{% endraw %} {% raw %}
{% endraw %} + #### 好例子 ``` js @@ -1398,13 +1443,14 @@ computed: { -### 带引号的 attribute 值 强烈推荐 +### 带引号的 attribute 值强烈推荐 **非空 HTML attribute 值应该始终带引号 (单引号或双引号,选你 JS 里不用的那个)。** 在 HTML 中不带空格的 attribute 值是可以没有引号的,但这鼓励了大家在特征值里*不写*空格,导致可读性变差。 {% raw %}
{% endraw %} + #### 反例 ``` html @@ -1417,6 +1463,7 @@ computed: { {% raw %}
{% endraw %} {% raw %}
{% endraw %} + #### 好例子 ``` html @@ -1430,11 +1477,12 @@ computed: { -### 指令缩写 强烈推荐 +### 指令缩写强烈推荐 -**指令缩写 (用 `:` 表示 `v-bind:` 、用 `@` 表示 `v-on:` 和用 `#` 表示 `v-slot:`) 应该要么都用要么都不用。** +**指令缩写 (用 `:` 表示 `v-bind:`、用 `@` 表示 `v-on:` 和用 `#` 表示 `v-slot:`) 应该要么都用要么都不用。** {% raw %}
{% endraw %} + #### 反例 ``` html @@ -1463,6 +1511,7 @@ computed: { {% raw %}
{% endraw %} {% raw %}
{% endraw %} + #### 好例子 ``` html @@ -1520,7 +1569,7 @@ computed: { -### 组件/实例的选项的顺序 推荐 +### 组件/实例的选项的顺序推荐 **组件/实例的选项应该有统一的顺序。** @@ -1581,7 +1630,7 @@ computed: { -### 元素 attribute 的顺序 推荐 +### 元素 attribute 的顺序推荐 **元素 (包括组件) 的 attribute 应该有统一的顺序。** @@ -1625,13 +1674,14 @@ computed: { -### 组件/实例选项中的空行 推荐 +### 组件/实例选项中的空行推荐 **你可能想在多个属性之间增加一个空行,特别是在这些选项一屏放不下,需要滚动才能都看到的时候。** 当你的组件开始觉得密集或难以阅读时,在多个属性之间添加空行可以让其变得容易。在一些诸如 Vim 的编辑器里,这样格式化后的选项还能通过键盘被快速导航。 {% raw %}
{% endraw %} + #### 好例子 ``` js @@ -1688,11 +1738,12 @@ computed: { -### 单文件组件的顶级元素的顺序 推荐 +### 单文件组件的顶级元素的顺序推荐 **[单文件组件](../guide/single-file-components.html)应该总是让 `