javascript - 组件中的 VueJS 引用不起作用
问题描述
这是我的代码的一个非常精简的版本:
<html>
<head>
<script src="file:///D:/OtherWork/javascript/vue/vue.js"></script>
</head>
<body>
<div id="app">
<Dial style="width: 120px; height: 120px;" v-model="src_value"></Dial>
</div>
<script>
Vue.component('Dial', {
template: '<canvas ref="dial_canvas"></canvas>',
data: function () {
return {
value: 0,
centre: { x: 0, y: 0 },
canvas: null
}
},
props: ['value'],
mounted: function() {
console.log(this.$refs.dial_canvas);
},
render: function() {
// TODO: Draw on canvas here.
}
});
var app = new Vue({
el: '#app',
data: {
src_value: -1
},
created() {
}
});
</script>
</body>
</html>
当我运行它并查看控制台日志时,this.$refs.dial_canvas
未定义。
我已经阅读了有关此的各种问题。这个问题和这个问题都说错误是试图访问$refs
(和$el
)内部created()
而不是mounted()
但那不是我的错误(或者它是但我修复了它)。
我找到了各种关于在组件中使用引用的文章,但无一例外,它们都使用“.vue”文件并且有一些我不理解的奇怪语法来导入组件......这对我不起作用。看起来他们正在使用一些服务器端魔法,我不希望那样。我需要(真的需要)能够使 Web 服务器尽可能简单 - 只是从最简单的 Web 服务器提供的纯旧文本文件。
我需要我的组件是可重用的,这样我就可以在一个页面上有多个显示不同的值。
如何在保持组件尽可能简单的同时访问组件中的引用?
Ps$el
也用于指向<canvas>
元素(在我进行一些更改之前),但它也是未定义的。
解决方案
正如@skirtle 所说,您不能拥有渲染功能和模板。事实上,我发现使用空的渲染函数时,Vue 会用空注释替换元素。
我还发现组件名称中的大写字母会导致问题。
我的解决方案是将我的渲染函数替换为这样的方法:
methods: {
setValue: function(value) {
this.value = value;
// TODO: Draw on canvas here.
}
},
我还在ref
模板中的条目中添加了一个,当更新的值使用ref
来获取组件并使用我的新setValue
方法来设置内部值并重绘画布以表示该值时。
推荐阅读
- php - 使用 PHP 更改其他插件函数中的变量值
- wordpress - 我想在帖子元中添加一个新值而不删除旧值
- ios - bringSubviewToFront 不适用于自定义按钮的子视图
- javascript - 如果机器人试图获取的 subreddit 不存在,我该如何获取?
- unix - 无法以 root 用户身份在 /var/log 下创建目录
- java - 使用 gridlayoutmanager 在 recyclerview 中显示 9 个项目
- pine-script - Pine Script - 在单一布局中左右缩放
- javascript - 无法检索文本框值
- javascript - 为什么在按钮标签 onclick=methodname 没有给出输出但 onclick=operation 给出输出
- java - spring boot 冷启动在 aws lambda 上花费的时间太长,并且 boot 初始化两次