如何在范围外更改 vue.js 组件数据

Posted

技术标签:

【中文标题】如何在范围外更改 vue.js 组件数据【英文标题】:How to change vue.js components data outside scope 【发布时间】:2019-12-18 07:25:30 【问题描述】:

我想在默认导出语句之外更改 vue.js 数据。鉴于下面的示例,我将如何去做?

<template>
    <div>
        <h6 class="font-weight-normal mb-3"> name </h6>
    </div>
</template>

<script>
export default 
    data() 
        return 
            name: ""
        
    


let changeName = (name) => 
    //How do I change the name data property here

</script>

【问题讨论】:

这通常通过props 或slots 完成。 恐怕做不到,因为Vue Loader will only look for stuff inside the default export。问题是你的用例是什么,因为应该有一种与 Vue 工作方式兼容的方式来实现你想要的。 【参考方案1】:

如果您将组件分配给变量/常量,您应该能够简单地触发数据对象的代理设置器或使用组件级方法。

const component = new Vue(
  data() 
    return 
      name: "Initial value."
    
  ,
  
  methods: 
    changeName(newName) 
      this.name = newName;
    
  
);

// Mount it to an element (for demo purposes)
component.$mount('#app');

document.getElementById('btn-setter').onclick = function() 
  component.name = 'Changed with SETTER';
;

document.getElementById('btn-method').onclick = function() 
  component.changeName('Changed with METHOD');
;

// Uncomment this to start exporting it.
// export default component;
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>

<div id="app">
  <h6 class="font-weight-normal mb-3"> name </h6>
  
  <button id="btn-setter">Change with setter</button>
  <button id="btn-method">Change with method</button>
</div>

【讨论】:

【参考方案2】:

您可以在组件之外的页面中编写任何您想要的函数(或导出语句),但您需要在您的methods 部分或组件中的某个位置调用它。我将它用于创建默认值的函数,而不是从外部导入它们,只需编写一个函数 initVal = () =&gt; someVal 然后在 datacomputed 或某处引用 initVal (没有这个)。

【讨论】:

以上是关于如何在范围外更改 vue.js 组件数据的主要内容,如果未能解决你的问题,请参考以下文章

Vue.js 中父级数据更改时如何重新渲染内部组件

变量更改时如何重新渲染 vue.js 组件

Vue JS 3:如何将数据从一个组件传递到另一个组件?

如何在 Vue Js 中将数据值从一个组件更改为另一个组件?

Vue JS - 如何更改鼠标悬停时显示的组件的位置

如何将 Vue.js 范围样式应用于通过视图路由器加载的组件?