gpt4 book ai didi

javascript - 将数据从 Rails View 传递到 webpacker 中的 VueJS 组件

转载 作者:搜寻专家 更新时间:2023-10-30 22:52:59 24 4
gpt4 key购买 nike

我正在尝试使用 Rails 5.1 的新 webpacker gem 以及 VueJS,但无法让我的 erb View 将数据传递给 VueJS 组件...

假设我有一个用户显示 View

# view/users/show.html.erb
<%= javascript_pack_tag "user-card" %>
<%= content_tag :div,
id: "user-card",
data: {
username: @user.name
} do %>
<% end %>

还有我的javascript:

// app/javascript/packs/user-card.js
require("user-card")

// app/javascript/user-card/index.js
import Vue from 'vue/dist/vue.esm'
import UserCard from './components/UserCard'

document.addEventListener('DOMContentLoaded', () => {
let element = document.getElementById("user-card")
let username = element.dataset.username
console.log(username); // => "pecpec"

const app = new Vue({
el: element,
template: '<UserCard/>',
components: { UserCard },
data () {
return { username }
}
})


// app/javascript/user-card/components/UserCard.vue
<template>
<div>
<h3>Hello {{ username }}</h3>
</div>
</template>

<script>
export default {
props: ['username'],
data () {
return {
username: ""
}
}
}
</script>

到目前为止,我已经为此花费了几个小时,但我的尝试都没有成功。我试过将数据作为 Prop 传递给组件:props: ['username'], 挂载组件

Vue.component(UserCard, {
props: ['username']
// or
data () {
return { username: username }
}
})

...但这也没有用

更新:我在组件中遗漏了 props: ['username'] 并相应地更新了上面的代码,尽管这似乎没有什么不同。仍然没有运气!

最佳答案

有效!这是我的解决方案......不确定这是否是规范的方法,但它仍然有效。现在看起来很明显……希望这对其他人有帮助。这是完整的更新代码:

# view/users/show.html.erb
<%= javascript_pack_tag "user-card" %>
<%= content_tag :div,
nil,
id: "user-card",
data: { username: @user.name }
%>
// app/javascript/packs/user-card.js
require("user-card")

// app/javascript/user-card/index.js
import Vue from 'vue/dist/vue.esm'
import UserCard from './components/UserCard'

document.addEventListener('DOMContentLoaded', () => {
let element = document.getElementById("user-card")
let username = element.dataset.username

const app = new Vue({
el: element,
data: { username: username },
template: '<UserCard :username="username"/>',
components: { UserCard }
})
})

// app/javascript/user-card/components/UserCard.vue
<template>
<div>
<h3>Hello {{ username }}</h3>
</div>
</template>

<script>
export default {
props: ['username']
}
</script>

关于javascript - 将数据从 Rails View 传递到 webpacker 中的 VueJS 组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43821728/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com