更漂亮的插槽语法
随着Vue 2.6的推出,已经引入了插槽的简写方式,可用于事件(例如,@click
表示 v-on:click
事件)或冒号表示方式用于绑定(:src
)。例如,如果你有一个表格组件,你可以使用这个功能如下:
... /* 一些内容,你可以在这里自由使用“item” */ ...
$on(‘hook:’) 可以帮助你简化代码
删除事件监听器是一种常见的最佳实践,因为它有助于避免内存泄露并防止事件冲突。
如果你想在 created
或 mounted
的钩子中定义自定义事件监听器或第三方插件,并且需要在 beforeDestroy
钩子中删除它以避免引起任何内存泄漏,那么这是一个很好的特性。下面是一个典型的设置:
mounted () {window.addEventListener('resize', this.resizeHandler);},beforeDestroy () {window.removeEventListener('resize', this.resizeHandler);}
使用 $on('hook:')
方法,你可以仅使用一种生命周期方法(而不是两种)来定义/删除事件。
mounted () {window.addEventListener('resize', this.resizeHandler);this.$on("hook:beforeDestroy", () => {window.removeEventListener('resize', this.resizeHandler); })}
$on 还可以侦听子组件的生命周期钩子
最后一点,生命周期钩子发出自定义事件这一事实意味着父组件可以监听其子级的生命周期钩子。
它将使用正常模式来监听事件(@event),并且可以像其他自定义事件一样进行处理。
使用 immediate: true 在初始化时触发watcher
Vue Watchers 是添加高级功能(例如,API调用)的好方法,该功能可以在观察值发生变化时运行。
默认情况下,观察者不会在初始化时运行。根据你的功能,这可能意味着某些数据不会完全初始化。
watch: {title: (newTitle, oldTitle) => { console.log("Title changed from " + oldTitle + " to " + newTitle) }}
如果你需要 wather 在实例初始化后立即运行,那么你所要做的就是将 wather 转换为具有 handler(newVal, oldVal)
函数以及即时 immediate: true
的对象。
watch: {title: { immediate: true,handler(newTitle, oldTitle) { console.log("Title changed from " + oldTitle + " to " + newTitle) } }}
你应该始终验证你的Prop
验证 Props 是 Vue 中的基本做法之一。
你可能已经知道可以将props验证为原始类型,例如字符串,数字甚至对象。你也可以使用自定义验证器——例如,如果你想验证一个字符串列表:
props: {status: { type: String, required: true, validator: function (value) { return ['syncing','synced','version-conflict','error' ].indexOf(value) !== -1 } }}
动态指令参数
Vue 2.6的最酷功能之一是可以将指令参数动态传递给组件。假设你有一个按钮组件,并且在某些情况下想监听单击事件,而在其他情况下想监听双击事件。这就是这些指令派上用场的地方:
...... ... data(){return{ ... someEvent: someCondition ? "click" : "dbclick" } },methods: { handleSomeEvent(){// handle some event } }
而且,这实际上也很整洁-你可以将相同的模式应用于动态HTML属性,props等。
重用相同路由的组件
开发人员经常遇到的情况是,多个路由解析为同一个Vue组件。问题是,Vue出于性能原因,默认情况下共享组件将不会重新渲染,如果你尝试在使用相同组件的路由之间进行切换,则不会发生任何变化。
const routes = [{path: "/a",component: MyComponent},{path: "/b",component: MyComponent},];
如果你仍然希望重新渲染这些组件,则可以通过在 router-view
组件中提供 :key
属性来实现。