File tree 4 files changed +68
-26
lines changed
4 files changed +68
-26
lines changed Original file line number Diff line number Diff line change 26
26
- [ cssSourceMap] ( options.md#csssourcemap )
27
27
- [ esModule] ( options.md#esmodule )
28
28
- [ preserveWhitespace] ( options.md#preservewhitespace )
29
+ - [ compilerModules] ( options.md#compilermodules )
30
+ - [ compilerDirectives] ( options.md#compilerdirectives )
29
31
- [ transformToRequire] ( options.md#transformtorequire )
30
32
- [ buble] ( options.md#buble )
31
33
- [ extractCSS] ( options.md#extractcss )
Original file line number Diff line number Diff line change 4
4
5
5
![ hot-reload] ( http://blog.evanyou.me/images/vue-hot.gif )
6
6
7
+ ## 状态保留规则
8
+
9
+ - 当编辑一个组件的 ` <template> ` 时,这个组件实例将就地重新渲染,并保留当前所有的私有状态。能够做到这一点是因为模板被编译成了新的无副作用的渲染函数。
10
+
11
+ - 当编辑一个组件的 ` <script> ` 时,这个组件实例将就地销毁并重新创建。(应用中其它组件的状态将会被保留) 是因为 ` <script> ` 可能包含带有副作用的生命周期钩子,所以将“重新加载”替换为重新渲染是必须的,这样做可以确保组件行为的一致性。这也意味着,如果你的组件带有全局副作用,则整个页面将会被重新加载。
12
+
13
+ - ` <style> ` 会通过 ` vue-style-loader ` 自行热重载,所以它不会影响应用的状态。
14
+
15
+ ## 用法
16
+
7
17
当使用脚手架工具 ` vue-cli ` 时,热重载是开箱即用的。
18
+
19
+ 当手动设置你的工程时,热重载会在你启动 ` webpack-dev-server --hot ` 服务时自动开启。
20
+
21
+ 高阶用户可能希望移步 ` vue-loader ` 内部使用的 [ vue-hot-reload-api] ( https://github.com/vuejs/vue-hot-reload-api ) 继续查阅。
Original file line number Diff line number Diff line change 1
- # CSS 作用域
1
+ # 有作用域的 CSS
2
2
3
3
当 ` <style> ` 标签有 ` scoped ` 属性时,它的 CSS 只作用于当前组件中的元素。这类似于 Shadow DOM 中的样式封装。它有一些注意事项,但不需要任何 polyfill。它通过使用 PostCSS 来实现以下转换:
4
4
28
28
</template >
29
29
```
30
30
31
- #### 注意
31
+ ## 注意
32
32
33
- 1 . 你可以在一个组件中同时使用 scoped 和 non-scoped styles
33
+ ### 混用本地和全局样式
34
34
35
- ``` html
36
- <style >
37
- /* global styles */
38
- </style >
35
+ 你可以在一个组件中同时使用有作用域和无作用域的样式:
39
36
40
- <style scoped >
41
- /* local styles */
42
- </style >
43
- ```
37
+ ``` html
38
+ <style >
39
+ /* 全局样式 */
40
+ </style >
41
+
42
+ <style scoped >
43
+ /* 本地样式 */
44
+ </style >
45
+ ```
46
+
47
+ ### 子组件的根元素
44
48
45
- 2 . 子组件的根节点将同时受父组件和子组件作用域 CSS 的影响。
49
+ 使用 ` scoped ` 后,父组件的样式将不会渗透到子组件中。不过一个子组件的根节点会同时受其父组件有作用域的 CSS 和子组件有作用域的 CSS 的影响。这样设计是为了让父组件可以从布局的角度出发,调整其子组件根元素的样式 。
46
50
47
- 3 . Partials 不受作用域样式影响。
51
+ ### 深度作用选择器
48
52
49
- 4 . ** CSS 作用域不能代替 classes** 。考虑到浏览器渲染各种 CSS 选择器的方式,当使用 scoped 时,` p { color: red } ` 在作用域中会慢很多倍 (即当与属性选择器组合时)。如果你使用 classes 或者 ids 代替,比如 ` .example { color: red } ` ,这样几乎没有性能影响。你可以在[ 这块试验田] ( https://stevesouders.com/efws/css-selectors/csscreate.php ) 测试它们的不同。
53
+ 如果你希望 ` scoped ` 样式中的一个选择器能够作用得“更深”,例如影响子组件,你可以使用 ` >>> ` 操作符:
54
+
55
+ ``` html
56
+ <style scoped >
57
+ .a >>> .b { /* ... */ }
58
+ </style >
59
+ ```
60
+
61
+ 上述代码将会编译成:
62
+
63
+ ``` css
64
+ .a [data-v-f3f3eg9 ] .b { /* ... */ }
65
+ ```
50
66
51
- 5 . ** 在递归组件中小心使用后代选择器! ** 对于带有选择器 ` .a .b ` 的CSS 规则,如果元素 ` .a ` 包含递归子组件,所有的子组件中的 ` .b ` 会被匹配 。
67
+ 有些像 SASS 之类的预处理器无法正确解析 ` >>> ` 。这种情况下你可以使用 ` /deep/ ` 操作符取而代之——这是一个 ` >>> ` 的别名,同样可以正常工作 。
52
68
53
- 6 . 如果 ` scoped ` 样式中需要嵌套的选择器,你得在 CSS 中使用 ` >>> ` 操作符,且在 ` scss ` 中使用 ` /deep/ ` :
69
+ ### 动态生成的内容
54
70
55
- ``` html
56
- <style scoped >
57
- .a >>> .b {
71
+ 通过 ` v-html ` 创建的 DOM 内容不受作用域内的样式影响,但是你仍然可以通过深度作用选择器来为他们设置样式。
58
72
59
- }
60
- </style >
73
+ ### 还有一些要留意
61
74
62
- <style lang =" scss" scoped >
63
- .a /deep/ .b {
75
+ - ** CSS 作用域不能代替 class** 。考虑到浏览器渲染各种 CSS 选择器的方式,当 ` p { color: red } ` 设置了作用域时 (即与特性选择器组合使用时) 会慢很多倍。如果你使用 class 或者 id 取而代之,比如 ` .example { color: red } ` ,性能影响就会消除。你可以在[ 这块试验田] ( https://stevesouders.com/efws/css-selectors/csscreate.php ) 中测试它们的不同。
64
76
65
- }
66
- </style >
67
- ```
77
+ - ** 在递归组件中小心使用后代选择器!** 对选择器 ` .a .b ` 中的 CSS 规则来说,如果匹配 ` .a ` 的元素包含一个递归子组件,则所有的子组件中的 ` .b ` 都将被这个规则匹配。
Original file line number Diff line number Diff line change @@ -136,6 +136,22 @@ module.exports = {
136
136
137
137
如果设置为 ` false ` ,模版中 HTML 标签之前的空格将会被忽略。
138
138
139
+ ### compilerModules
140
+
141
+ - 类型:` Array<ModuleOptions> `
142
+ - 默认值:` [] `
143
+
144
+ 为 ` vue-template-compiler ` 配置 ` modules ` 选项。相关细节请查阅 ` vue-template-compiler ` 的 [ ` modules ` 选项] ( https://github.com/vuejs/vue/blob/dev/packages/vue-template-compiler/README.md#compilercompiletemplate-options ) 。
145
+
146
+ ### compilerDirectives
147
+
148
+ - 类型:` { [tag: string]: Function } `
149
+ - 默认值:` {} ` (v13.0.5+)
150
+
151
+ > 版本说明:在 v12.x 中,从 v12.2.3+ 开始支持
152
+
153
+ 为 ` vue-template-compiler ` 配置 ` directives ` 选项。相关细节请查阅 ` vue-template-compiler ` 的 [ ` modules ` 选项] ( https://github.com/vuejs/vue/blob/dev/packages/vue-template-compiler/README.md#compilercompiletemplate-options ) 。
154
+
139
155
### transformToRequire
140
156
141
157
- 类型: ` { [tag: string]: string | Array<string> } `
You can’t perform that action at this time.
0 commit comments