vue.js - Vue 组件中 HTML 元素 id 的作用域
问题描述
Vue 组件是否有一些内置的作用域机制,因为 Vue 组件内的 html 元素的 id 属性的值是唯一定义的,而无需程序员的努力?
在下面的代码中,我创建了两个组件,并希望每个组件的行为彼此独立。所以,理想情况下,如果我点击每个按钮,每个按钮都需要打印出“foo”,但实际上并不是因为 id 的值是重复的。
<!DOCTYPE html>
<head>
<title></title>
</head>
<body>
<div id="app">
<my-comp></my-comp>
<my-comp></my-comp>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script src="https://unpkg.com/vue"></script>
<script>
Vue.component('my-comp', {
template: `
<div>
<button id="btn" @click="onClick">Click me</button>
<div id="pid"></div>
</div>
`,
methods: {
onClick(e) {
$('#pid').text("foo");
}
},
});
const vm = new Vue({
el: '#app',
data: () => ({}),
methods: {}
});
</script>
</body>
</html>
解决方案
不要id
在 vue 组件中使用,除非您使用 props 为其传递唯一值。你应该很少需要在 vue 中获取一个元素的引用,如果你确实需要,那么你应该使用refs。
在您的情况下,您可以只使用属性和模板绑定来为您处理事情:
Vue.component('my-comp', {
template: `
<div>
<button @click="onClick">Click me</button>
<div>{{ text }}</div>
</div>
`,
data() {
text: ''
},
methods: {
onClick(e) {
this.text = 'foo'
},
},
})
推荐阅读
- angular7 - 如何使表单数组嵌套在同一个表单数组中
- c++ - 仅在第一次使用变量时才计算变量的好模式是什么?
- google-apps-script - 在 Google Scripts 中将可变数据插入现有的 Google Sheet
- python-3.x - 如何拆分数字箱并找到箱的平均值
- javascript - iOS ui 隐藏页面底部。当iOS底部菜单隐藏和显示时,如何使整个页面响应并且其底部始终可见?
- javascript - 在排序标题列上使用 vue 添加和删除类
- ruby-on-rails - 推送到 heroku 是否会中断当前在 rails 应用程序中运行的 rake 任务?
- sql-server - SQL Server:CASE 根据 2 个表中的条目进行更新
- r - 使用 kable 和 kableExtra 渲染带有 bookdown 的 gitbook 和 pdf_book
- c# - 将事件调用传递给其他类