代码之家  ›  专栏  ›  技术社区  ›  Grandizer

为什么我不能启动Vue阵列并让它工作呢?

  •  1
  • Grandizer  · 技术社区  · 8 年前

    为了尽可能简单,下面是我的组件:

    这是页面的Vue

    data: {
      openOrders: DataSets.CardTests
    },
    computed: {
      myOrders() {
        return this.openOrders.filter(x => {
          return ((x.FellowName !== undefined) && (x.FellowName.First === 'Sandra') && (x.FellowName.Last === 'Someone'));
        });
      },
      othersOrders() {
        return this.openOrders.filter(x => {
          return ((x.FellowName !== undefined) && ((x.FellowName.First + ' ' + x.FellowName.Last) !== 'Sandra Someone'));
        });
      },
      unassignedOrders() {
        return this.openOrders.filter(x => {
          return (x.FellowName === undefined);
        });
      },
    },
    mounted() {
      // Doing nothing here
    }
    

    上面的'should'填充了我的自定义组件 order-set 计算值为 myOrders

    <order-set ref="MyOrders"
               role-type="functional"
               title="My Work Queue"
               v-bind:is-multi-column="false"
               v-bind:is-collapsable="true"
               v-bind:can-view="true"
               v-bind:allow-view-swap="true"
               v-bind:as-table="false"
               v-bind:orders="myOrders">
    </order-set>
    

    还有另外两个例子 订单集 othersOrders unassignedOrders

    这个 DataSets.CardTests

    CardTests: [{
      Id: 104,
      PatientName: {
        First: 'Richard',
        Middle: '',
        Last: 'Priebe'
      },
      DefaultMrn: {
        Type: 'CCF Main',
        Number: '123133',
        IsDefault: true
      },
      PatientDob: '2000-12-28T00:00:00',
      OrderDateTime: '2018-02-01T06:00:00-04:00',
      NursingUnit: 'M50',
      Site: 'CCF Main Campus',
      Bed: '18',
      TechnologistName: {
        First: 'Tim',
        Middle: null,
        Last: 'Fellows'
      },
      TestTypeCode: 'PORT',
      TestTypeDescription: 'Portable EEG'
    }]
    

    当然,现在这只是垃圾测试数据,但最终将来自数据库。

    第二步,我开始让它更“真实”,一旦页面加载,我就收集数据,如下所示:

    data: {
      openOrders: []
    },
    mounted() {
      for (let o in DataSets.CardTests) {
        this.openOrders.push(DataSets.CardTests[o]);
      }
    }
    

    我孩子身上什么也看不出来 订单集

    然而,在Chrome的Vue开发工具中,我看到 openOrders 有10条记录 我的订单 , 其他排序 未分配订单 组件具有 orders 道具与正确的数据集以及。 但是 ,内部数据元素( values 在这种情况下)在 订单集 组件没有元素。

    订单集组件

    props: {
      orders: { type: Array, required: true, default() { return [] } }
    },
    data() {
      return {
        values: this.orders
      };
    },
    

    prop 你可能会变异,你应该把它复制到 data 所以它是“可反应的”。

    -简单部分 订单集 不工作/显示总记录的组件:

    <div class="order-set">
      <div class="mb-2">
        <div class="card-header">
          <div class="d-flex justify-content-between">
            <h3><span class="highlight">{{ values.length }}</span> {{ title }}</h3>
          </div>
        </div>
      </div>
    </div>
    

    那我还缺什么?我甚至试过 this.$nextTick setTimeout 测试,看看是否是一个时间的事情,没有用。

    2 回复  |  直到 8 年前
        1
  •  5
  •   HuyDD    8 年前

    values OrderSet 当支柱 orders

    props: {
      orders: { type: Array, required: true, default() { return [] } }
    },
    computed: {
      values () {
        return this.orders
      };
    },
    

    :在这种情况下,为什么数据的属性不是被动的

    定义组件时,必须将数据声明为 使用相同的定义创建。如果我们用一个普通的对象作为数据, 同一对象将通过引用在所有实例中共享 每次创建新实例时 .

    如果需要,可以通过

    所以 价值观 openOrders ,导致 未结订单 不影响 价值观

    参考文献: https://vuejs.org/v2/api/#data

        2
  •  -1
  •   Krishna    8 年前

    created: function() {
      for (let o in DataSets.CardTests) {
        this.openOrders.push(DataSets.CardTests[o]);
      }
    }
    


    1创建
    2计算

    推荐文章