Far*_*aei 11 javascript vue.js
我在 window 对象中设置了一个属性以全局使用它,如下所示:
window.configs.foo=true;
Run Code Online (Sandbox Code Playgroud)
但是当像这样使用它时:
<v-btn v-if="window.configs.foo">go</v-btn>
Run Code Online (Sandbox Code Playgroud)
在控制台中,我收到此错误:
[Vue 警告]:属性或方法“window”未在实例上定义,而是在渲染期间引用。通过初始化属性,确保此属性是反应性的,无论是在数据选项中,还是对于基于类的组件。
我如何在 vueJs 模板中使用 window 对象?
因为v-if旨在用于组件的属性。您不能v-if覆盖全局范围内的变量,也不能覆盖组件数据或属性之外的变量。
相反,如果要在目标组件上设置计算属性,您可以做什么window.configs.foo:
new Vue({ // or maybe a component, this depend on how you\'re using it\n template: `<div>\n <v-btn v-if="showMyButton">...</v-btn>\n </div>`\n computed: {\n showMyButton() {\n return window.configs && window.configs.foo;\n }\n }\n})\n\nRun Code Online (Sandbox Code Playgroud)\n更新:
\n如果您必须在很多站点中重复使用它,您可以执行以下两件事:
\n使用 vuex将 设为showMyButtonvuex 状态。然后您可以通过以下方式访问它:
v-if="$store.state.showMyButton"
你可以通过标准vuex 突变来修改它。
\n也许由于某种原因你不想使用 vuex。那么跨多个组件重用逻辑的一种方法是使用 mixins。
\nconst configAwareMixin = {\n computed: {\n showButton() {\n return window.configs.foo;\n }\n }\n}\n\n// And then in your component:\n\nVue.component(\'stuff\', {\n mixins: [buttonAwareMixin],\n template: `<div><v-btn v-if="showButton"></v-btn></div>`\n}) \nRun Code Online (Sandbox Code Playgroud)\n