更改 vuejs2 中的道具值

Posted

技术标签:

【中文标题】更改 vuejs2 中的道具值【英文标题】:Change props value in vuejs2 【发布时间】:2018-07-08 21:15:12 【问题描述】:

我是 vuejs2 开发的新手。我在modal 开发中工作。我将模态正文代码保存在一个组件中,并在另一个组件中显示该模态。我在模态正文组件中有以下代码。

<script>  
import SemanticModal from 'vue-ya-semantic-modal'

export default         
    components:  SemanticModal: SemanticModal() ,
    name: 'ModalBody',
    props: ['active1',],
    data() 
        return  
            visible: false
        
    ,
    methods: 
        close() 
            this.$emit('sendValue', false);  //this is working
            this.visible = false
        ,
        open () 
            this.visible = true
        ,
    ,
    watch: 
        active1 () 
            if (this.active1 && !this.visible) this.open()
            else if (!this.active1 && this.visible) this.close()
        ,
    ,
    directives: 
        'click-outside': 
            bind: function(el, binding, vNode) 
                el.onclick = function(e) 
                    var modal = document.getElementsByClassName("modal");
                    el.addEventListener('click', function (event) 
                        if (!modal[0].contains(event.target))                                
                       vNode.context.$emit('sendValue', false);  //this is not working
                       this.visible = false
                         
                    )            
               
                
        
    

我在父组件中调用该模型(子)组件,如下所示

<modal-body :active1="active1" @sendValue="active1 = $event"></modal-body>

我需要将下面的 props active1 值从子组件更改为 false 到父组件。

【问题讨论】:

你试过了吗。$emit("sendValue",false); ? 谢谢@divine。我试过了,但它不起作用。谢谢。 父级收到子级发出的值吗? 谢谢@divine。可能会收到。我正在使用这条线&lt;modal-body :active1="active1" @sendValue="active1 = $event"&gt;&lt;/modal-body&gt; 接收父级中的值。谢谢。 在查看了您的指令编码后,我觉得我们可以使用 @click 实现相同的行为。 【参考方案1】:

您正在使用指令处理点击事件。

根据您的要求,clickoutside 指令应该从child to parent 发出sendValue 事件。但我觉得你的代码有些复杂。

完成您的场景的正确代码如下

          directives: 
                'clickoutside': 
                    bind: function(el, binding, vNode) 
                        el.onclick = function(e)          
                            console.log("binding clicked");
                            vNode.context.$emit('sendValue', false);  
                        
                        
                
            

如果您的目标是使用click event,您可以使用@click 绑定来完成同样的操作

【讨论】:

以上是关于更改 vuejs2 中的道具值的主要内容,如果未能解决你的问题,请参考以下文章

当路由器在 vuejs2.0 中更改时,vue-route 将不同的道具传递给不同的视图组件?

为啥在 vuejs2 中我的默认道具没有传递给我的子组件?

使属性反应,道具Vuejs2数据绑定

如何通过选定的道具动态地更改 vue js 2 中的选项卡?

vue js 2:在挂载函数中访问道具

Vuejs2:数组更改时如何重新渲染数组计算属性