javascript - 使用 Vuejs 和普通的 Javascript (vanilla)
问题描述
我需要使用 Vue 并在普通 javascript 中调用另一个函数,还需要更改 Vue 中的一些变量,然后在 Javascript 中读取它们。
网上的解决方案是在Vue组件中插入普通的javascript函数(意思是把所有东西都移到Vue中),但是有些函数太大或太复杂而无法重构为Vue。
因此,我需要一种方法来处理 Vanilla Javascript 和 Vue 之间的变量和函数,同时我将所有内容都转移到 Vue。
解决方案
模板只能访问 Vue 实例的上下文。换句话说,就是this
你的组件中所指的内容。如果您想在模板中使用全局上下文中的任何内容,请computed
使用返回全局引用的箭头函数在 中重新声明它:
computed: {
vanillaFunction: () => vanillaFunction
}
看到它工作:
Vue.config.devtools = false;
Vue.config.productionTip = false;
new Vue({
el: '#app',
computed: {
window: () => window,
console: () => console,
vanillaFunction: () => vanillaFunction
}
})
<script>
function vanillaFunction() {
console.log('Boo!');
}
</script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
<button @click="vanillaFunction">vanillaFunction</button>
<button @click="console.log(window.console.warn('You scared me!') || '¯\\_(ツ)_/¯')">console, window</button>
</div>
window
,console
并且vanillaFunction
在全局上下文中声明并且通常不能在您的模板中使用,现在可以直接在模板中使用。
在模板中使全局函数可用的另一种方法是将它们声明为method
s。但是,由于方法必须是函数,所以它只适用于函数,而computed
可以声明任何全局对象或类。
将其视为方法:
Vue.config.devtools = false;
Vue.config.productionTip = false;
new Vue({
el: '#app',
data: () => ({
my_value: ''
}),
methods: {
vanillaFunction
}
})
<script>
function vanillaFunction(value) {
console.log('Vue has changed the value to: ' + value)
}
</script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
<input type="text" v-model="my_value" @input="vanillaFunction(my_value)">
</div>
附加说明:不要this
在模板中使用。
推荐阅读
- javascript - 检查对象是否从 API 调用返回值,在另一个文件中
- javascript - 正则表达式获取 () 之间的字符串
- javascript - 在静态 Nginx 服务器上部署 React 应用程序时遇到问题
- css - 域名更改后 WordPress 网站坏了。(CSS)
- php - 刷新数据表而不重新加载页面
- react-native - GeoFire 与本机反应
- amazon-web-services - 在 EC2 Ubuntu VM 上运行一行部署脚本时生成的 URL 不起作用
- css - 如何将菜单栏的prime ng子菜单向右对齐?
- xcode12 - 升级到 Xcode 12:ld 后的问题:为 iOS 模拟器构建,但在为 iOS 构建的 dylib 中链接,架构 arm64
- c# - 表单上的 timeout 属性不起作用,几分钟后过期