怎么通过计算属性让父组件传给子组件的值,再从子组件传回去时为响应式的。

发布于 2022-09-12 04:41:41 字数 2046 浏览 15 评论 0

三个页面,index,render,render下的组件。
点击能打印出来数据,但是功能没法实现,我看有说用计算属性来做,这种该怎么做。(这个是组件计算属性实现的方法,我vuex那个方法实现也有问题。)

大致流程,侧边栏通过汉堡包关合。
%QPB_9K2TYMBINB)`56P~MB.png

index:

// 父组件collapsed要传给子路由
<a-layout-sider

 id="components-layout-demo-custom-trigger"

 v-model="collapsed"

 :trigger="null"

 collapsible

 >
 
 
<router-view :collapsed='collapsed' class="home-con"></router-view>

data() {

     return {

        collapsed: false,

     };

 },

render:

<header-side :collapsed="collapsed"></header-side>


props: ["collapsed"],

data() {

     return {

        // colla:''

     };

 },

子组件(获取到了,但是面包屑并不管使):

<a-layout-header style="background: #fff; padding: 0">

 <a-icon

 class="trigger"

 :type="colla ? 'menu-unfold' : 'menu-fold'"

 @click="changeTab"

 />

 </a-layout-header>


props: ["collapsed"],

 data() {

     return {

     };

 },
 
 watch: {

     collapsed: function(value) {

     console.log(value);

 },

 },
 
 computed: {

     colla: {

     // return this.collapsed;

        //getter 方法

         get() {

             console.log("computed getter...");

             console.log(this.collapsed)

             return this.collapsed;

         },

         //setter 方法

         set(newValue) {

             console.log("computed setter...");

             var val = this.$emit('collapsed',false);

             // // this.collapsed = val; // 这个地方直接报错

             console.log(newValue)

             return val

         },

     },

 },

 methods: {

     changeTab() { // 这个函数跟小图标左右标识有关系。

         this.colla = !this.colla;

         console.log(this.colla);

     },

 },

点击能打印出来的数据
image.png

////////////////////////////////////////////////////
设置过setter,getter后数据就一直不改了。
image.png

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

牵你手 2022-09-19 04:41:41

自问自答,router-view这个是路由的出口,在这个上面传递属性或者函数要用:并且其他页面接收是跟组件传值基本一致,而组件传值的方法必须用@传递。
页面逻辑:
G11GC18_FA4%1HR05KS{%K9.png

index页面相关代码:

<a-layout-sider
    id="components-layout-demo-custom-trigger"
    v-model="collapsed"
    :trigger="null"
    collapsible
>

<router-view :collapsed="collapsed" :success='success' class="home-con" ></router-view>

data() {
    return {
      collapsed: false,
    };
  },
  mounted() {},
  methods: {
    success(res) {
      this.collapsed = res;
      console.log(res);
    },
  },

render页面相关代码:

<header-side :collapsed="collapsed" @success='success'></header-side>

import headerSide from "@/components/Header.vue";

props: ["collapsed",'success']

render子组件相关代码:

<a-layout-header style="background: #fff; padding: 0">
    <a-icon
        class="trigger"
        :type="colla ? 'menu-unfold' : 'menu-fold'"
        @click="changeTab"
    />
</a-layout-header>

  props: ["collapsed",'success'],
  data() {
    return {
      colla: false,
    };
  },
  methods: {
    changeTab() {
      if (this.colla) {
        this.colla = false;
        this.$emit('success',false)
      } else {
        this.colla = true;
        this.$emit('success',true)
      }
    },
  },
滥情空心 2022-09-19 04:41:41

在子组件watch collapsed 然后赋值给colla;
或者

computed:{
    colla(){
       return this.collapsed;
    }
}
试下;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文