2 回答

TA贡献1794条经验 获得超8个赞
如果您在全局可见Drupal.settings.related_products.artiklar对象中有数据,那么您可以在 Vue.js 中以几乎相同的方式引用它。或者如果您必须使用此功能,请将数据分配给全局范围window.*。
new Vue({
template: `<div>{{foo}} / {{bar}}</div>`,
data() {
return {
foo: Drupal.settings.related_products.artiklar,
bar: window.artiklarData
};
}
}).$mount("#app");
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">Vue App</div>
<script>
// simulate global variable
var Drupal = {
settings: {
related_products: {
artiklar: ['fus', 'ro', 'dah']
}
}
};
(function() {
window.artiklarData = Drupal.settings.related_products.artiklar;
})();
</script>
如果您Drupal.settings.related_products.artiklar在创建Vue对象后分配值,您可以尝试使用文档中描述的解决方案,例如
const vm = new Vue({
template: `<div>{{foobar}}</div>`,
data() {
return {
foobar: 'Initial value'
};
}
}).$mount("#app");
setTimeout(() => {
// simulate global variable
var Drupal = {
settings: {
related_products: {
artiklar: 'Changed value'
}
}
};
(function() {
vm.foobar = Drupal.settings.related_products.artiklar;
})();
}, 2000);
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">Vue App</div>
也许您可以使用 RxJS,但我没有足够的知识来判断它是否正确并举个例子。

TA贡献1886条经验 获得超2个赞
以防万一其他人在同样的事情上苦苦挣扎,我将这个答案发布到我自己的问题中(我不小心用错误的帐户发布了问题)。最后证明 Gander 的回答是正确的,我可以直接在 Vue 组件中访问该变量,而无需先将其存储为一个全局变量。不过,查看的结果有点奇怪,经过一些试验后,我发现我必须使用 JSON.parse() 解析结果。这是现在的工作代码:
Vue.component('artikel-lista', {
template:`
<ul>
<artikel v-for="artikel in artiklar">{{ artikel.title }} Pris: {{artikel.price}} <a :href="artikel.link" class="button tiny" target="_blank">Läs mer</a></artikel>
</ul>
`,
data(){
return{
artiklar:""
}
},
mounted:function(){
this.artiklar = JSON.parse(Drupal.settings.related_products.artiklar);
console.log(this.artiklar);
}
});
添加回答
举报