Vue шаблон VS рендеринг проблема - PullRequest
0 голосов
/ 02 апреля 2019

Два приведенных ниже примера содержат одинаковую точную разметку шаблона, но визуализируются совершенно по-разному

Пример 1 (выпуск)

В приведенном ниже фрагменте вы увидите, что визуализированный вывод содержит только 1флажок, когда он должен содержать 2 (см. второй пример для правильного отображения)

const store = new Vuex.Store({
  state: {
    attribute: {
      tag: true,
      bag: false
    }
  },
  mutations: {
    setAttr(state, {
      value,
      attribute
    }) {
      state.attribute[attribute] = value;
    }
  }
});

Vue.component('custom-checkbox', {
  props: ['attribute'],
  template: '<div><input type="checkbox" v-model="checkBox">{{attribute}}</div>',
  computed: {
    checkBox: {
      get() {
        return this.$store.state.attribute[this.attribute]
      },
      set(value) {
        this.$store.commit('updateMessage', {
          value,
          attribute: this.attribute
        });
      }
    }
  }
});


new Vue({
  el: '#app',
  store
});
<div id="app">
  <div>
    <custom-checkbox attribute="tag" />
    <custom-checkbox attribute="bag" />
  </div>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vuex/3.1.0/vuex.min.js"></script>

Пример 2 (ожидается)

const store = new Vuex.Store({
  state: {
    attribute: {
      tag: true,
      bag: false
    }
  },
  mutations: {
    setAttr(state, { value, attribute }) {
      state.attribute[attribute] = value;
    }
  }
});

Vue.component('custom-checkbox', {
  props: ['attribute'],
  template: '<div><input type="checkbox" v-model="checkBox">{{attribute}}</div>',
  computed: {
    checkBox: {
      get() {
        return this.$store.state.attribute[this.attribute]
      },
      set(value) {
        this.$store.commit('updateMessage', {
          value,
          attribute: this.attribute
        });
      }
    }
  }
});


new Vue({
  el: '#app',
  store,
  template: '<div><custom-checkbox attribute="tag" /><custom-checkbox attribute="bag" /></div>'
});
<html>

<body>
  <div id="app"></div>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/vuex/3.1.0/vuex.min.js"></script>
</body>

</html>

Issue

Из того, что я понимаю, как работает vue, он берет содержимое #app и использует его в качестве шаблона, еслиtemplate явно не установлено в экземпляре.

Если это так, то почему первый рендеринг отображает только 1 элемент, а второй - оба?

Поведение кажется непоследовательным, особенно с учетомШаблон одинаков на обоих.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...