-
Notifications
You must be signed in to change notification settings - Fork 2
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
Vue高版本中一些新特性的使用 #7
Comments
谢谢楼主干货分享,请教一下,对于Vue项目中怎么接入vConsole.js ( https://github.com/Tencent/vConsole )进行准生产环境调试呢?谢谢! |
@WenTao-Love index.js: |
学习了[抱拳] |
找了一圈,原来是less不支持 >>> |
你好 可以转载到公众号吗 会注明来源和原文链接 |
可以。不过这个issue已经在<前端早读课>转载过了。 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Vue高版本中一些新特性的使用
一、深度作用选择器( >>> )
在项目开发中,如果业务比较复杂,特别像中台或B端功能页面都不可避免的会用到第三方组件库,产品有时会想对这些组件进行一些UI方面的定制。如果这些组件采用的是有作用域的CSS,父组件想要定制第三方组件的样式就比较麻烦了。
深度作用选择器(
>>>
操作符)可以助你一臂之力。上面的child组件中 .child-title 的作用域CSS设定字体大小为12px,现在想在父组件中定制为大小20px,颜色为红色。
效果妥妥的。但是别高兴太早,注意到上面的<style>使用的是纯css语法,如果采用less语法,你可能会收到一条webpack的报错信息。
上面的报错信息其实是less语法不认识 >>>。(less的github issue上有人提议支持>>>操作符,但本文使用的v2.7.3会有这个问题)
解决方案是采用的less的转义(scaping)和变量插值(Variable Interpolation)
对于其他的css预处理器,因为没怎么用,不妄加评论,照搬一下文档的话。
二、组件配置项inheritAttrs、组件实例属性$attrs和$listeners
组件配置项 inheritAttrs
我们都知道假如使用子组件时传了a,b,c三个prop,而子组件的props选项只声明了a和b,那么渲染后c将作为html自定义属性显示在子组件的根元素上。
如果不希望这样,可以设置子组件的配置项 inheritAttrs:false,根元素就会干净多了。
组件实例属性$attrs和$listeners
先看看vm.$attrs文档上是怎么说的
vm.$attrs
归纳起来就是两点:
还是以前面的child组件举例
vm.$listeners
归纳起来也是两点:
三、组件选项 provide/inject
如果列举Vue组件之间的通信方法,一般都会说通过prop,自定义事件,事件总线,还有Vuex。
provide/inject提供了另一种方法。
不过需要注意的是,在文档中并不建议直接用于应用程序中。
在2.5.0+时对于inject选项为对象时,还可以指定from来表示源属性,default指定默认值(如果是非原始值要使用一个工厂方法)。
四、作用域插槽 slot-scope
作用域插槽的文档说明很详细。下面举个例子来展示下应用场景。
可以看出列表页和编辑页对于数据的展示是一样的,唯一的区别是在不同页面对于数据有不同的处理逻辑。相同的数据展示这块就可抽取成一个组件,不同的地方则可以借助作用域插槽实现。
五、Vue的错误捕获
更详细的说明可以查看文档errorHandler
更详细的说明可以查看文档errorCaptured
如果熟悉React的话,会发现它跟错误边界(Error Boundaries)的概念很像,实际上也确实是这么用的。
在文档Error Handling with errorCaptured Hook就举了一个典型的例子
需要强调的是errorCaptured并不能捕获自身错误和异步错误(比如网络请求,鼠标事件等产生的错误)。
参考
The text was updated successfully, but these errors were encountered: