我有一个带有三个链接的页脚组件。当用户单击链接时,除了将用户带到新页面之外,我还尝试使用mixin来跟踪点击事件。当我在Chrome DevTools中设置断点时,似乎该实现不起作用。我导入了常数文件和混音。
页脚,简短的一个链接
<template>
<footer>
<div class="container">
<div class="row">
<div class="col align-center">
<a
href="/"
target="_blank"
class="btn"
name="item"
@click="logButtonClick(ANALYTICS.ITEM)">{{ $t('footer.item') }}</a>
</div>
</div>
</div>
</footer>
</template>
<script>
import analytics from '@/mixins/analytics'
import { ANALYTICS } from "@/constants"
export default {
name: 'PageFooter',
mixins: [analytics]
}
</script>
混合
methods: {
logButtonClick (buttonType) { // breakpoint here, get nothing
this.$analytics.track({
identifier: `Consumer ${this.$options.name} - ${buttonType} Button`
})
}
}
我想念什么吗?该实施是否有效,或者我应该有一种方法:
methods: {
selectLink(str) {
if (str === item) {
this.logButtonClick(ANALYTICS.ITEM)
}
}
}
我收到的原始错误是
'属性或方法ANALYTICS
未在实例上定义,而是在渲染过程中引用。通过初始化该属性,请确保该属性在数据选项或基于类的组件中具有反应性。
和
'uck typeError:在点击事件中无法阅读undefined的属性ITEM
....&quot'
本质上,这意味着我没有在PageFooter中定义分析(因为这是一个愚蠢的组件,我不想向其添加数据对象,我想严格保存它(或在VUE实例上添加它等级。由于分析是未定义的,因此项目会引发另一个错误,因为它不能是未定义的属性。
这是我的解决方案,我在添加的模板标签中使用了一个开关案例@click =&quot; selectlink('asd'(&quot
methods: {
selectLink (str) {
switch (true) {
case str === 'asd':
this.logButtonClick(ANALYTICS.ITEM)
break
case str === 'efg':
this.logButtonClick(ANALYTICS.ITEM2)
break
case str === 'hij':
this.logButtonClick(ANALYTICS.ITEM3)
break
}
}
}
和单元测试:
it('[positive] should track analytics if `asd` is passed to selectLink()', () => {
const str = 'asd'
const mockFn = jest.fn()
jest.spyOn(wrapper.vm, 'logButtonClick')
wrapper.find('a').trigger('click')
mockFn(str)
expect(wrapper.vm.logButtonClick).toHaveBeenCalledWith(ANALYTICS.COOKIE_CONSENT)
})
https://v2.vuejs.org/v2/guide/reactivity.html#declaring-reactive-properties
故事的寓意,高级工程师告诉您在代码审查中做一些时髦的事情。