кодесурса
«Вью

Отображение списка

script1adsense2code
script1adsense3code

Отображение массива в элементы с помощью v-for

Директива v-for может использоваться для вывода списка элементов на основе массива. Синтаксис для директивы v-for включает элемент в элементах, где исходные данные обозначены элементами, а элемент является псевдонимом для элемента массива, который будет повторяться:

<ul id="example-1">
  <li v-for="item in items">
    {{ item.message }}
  </li>
</ul>
var example1 = new Vue({
  el: '#example-1',
  data: {
    items: [
      { message: 'Foo' },
      { message: 'Bar' }
    ]
  }
})

У нас есть полный доступ к родительским свойствам области внутри блоков v-for. Vue-for поддерживает второй аргумент, который используется в качестве индекса текущего элемента.

<ul id="example-2">
  <li v-for="(item, index) in items">
    {{ parentMessage }} - {{ index }} - {{ item.message }}
  </li>
</ul>
var example2 = new Vue({
  el: '#example-2',
  data: {
    parentMessage: 'Parent',
    items: [
      { message: 'Foo' },
      { message: 'Bar' }
    ]
  }
})

можно использовать как разделитель вместо:

<div v-for="item of items"></div>

V-для с объектом

v-for может использоваться для перебора свойств объекта.

<ul id="v-for-object" class="demo">
  <li v-for="value in object">
    {{ value }}
  </li>
</ul>
new Vue({
  el: '#v-for-object',
  data: {
    object: {
      title: 'How to do lists in Vue',
      author: 'Jane Doe',
      publishedAt: '2016-04-10'
    }
  }
})

При желании вы можете добавить второй аргумент для имени свойства (он же ключ)

<div v-for="(value, name) in object">
  {{ name }}: {{ value }}
</div>

Еще один может быть добавлен для индекса:

<div v-for="(value, name, index) in object">
  {{ index }}. {{ name }}: {{ value }}
</div>

Поддержание государства

Всякий раз, когда Vue обновляет список, отображаемый с помощью v-for, он по умолчанию использует стратегию «исправления на месте». Если порядок элементов данных изменяется, а не перемещает элементы DOM в соответствии с порядком элементов, Vue исправляет элемент на месте и следит за тем, чтобы он отражал то, что должно быть отображено по этому конкретному индексу.

Если вы хотите, чтобы Vue отслеживал каждый идентификатор узла и, следовательно, повторно использовал и переупорядочивал существующие элементы, вам нужно будет предоставить уникальный атрибут ключа для каждого элемента:

<div v-for="item in items" v-bind:key="item.id">
  <!-- content -->
</div>

Обнаружение изменений массива

Методы мутации

Мутация наблюдаемого массива может быть обернута Vue, чтобы они всегда вызывали обновления представления, и они:

  • От себя()
  • поп ()
  • сдвиг()
  • unshift ()
  • сращивать ()
  • Сортировать()
  • задний ход()

Замена массива

Vue также предоставляет не мутирующие методы, filter (), concat () и slice (), которые не изменяют исходный массив, но всегда возвращают новый массив:

example1.items = example1.items.filter(function (item) {
  return item.message.match(/Foo/)
})

Предостережения

Vue не может обнаружить следующие изменения в массиве из-за ограничений в JavaScript:

  1. когда элемент напрямую устанавливается с помощью индекса, например, vm.items [indexOfItem] = newValue
  2. когда изменяется длина массива, например, vm.item.length = newLength
var vm = new Vue({
  data: {
    items: ['a', 'b', 'c']
  }
})
vm.items[1] ='x' // is NOT reactive
vm.items.length = 2 // is NOT reactive

Чтобы преодолеть первое предупреждение, следующее даст тот же результат, что и vm.items [indexOfItem] = newValue, а также инициирует обновление состояния в системе реактивности:

// Vue.set
Vue.set(vm.items, indexOfItem, newValue)
// Array.prototype.splice
vm.items.splice(indexOfItem, 1, newValue)

в качестве псевдонима для глобального Vue.set вы можете использовать vm. $ set.

Чтобы решить второе предостережение, используйте метод соединения

vm.items.splice(newLength)

Предупреждение об обнаружении изменения объекта

Vue также не может обнаружить добавление или удаление свойства:

var vm = new Vue({
  data: {
    a: 1
  }
})
// `vm.a` is now reactive
vm.b = 2
// `vm.b` is NOT reactive

Динамическое добавление новых реактивных свойств корневого уровня в созданный экземпляр недопустимо в vue, но мы можем добавить к вложенному объекту, используя метод Vue.set (object, propertyName, value):

var vm = new Vue({
  data: {
    userProfile: {
      name: 'Anika'
    }
  }
})

Вы можете добавить новое гендерное свойство во вложенный userProfile, используя:

Vue.set(vm.userProfile, 'gender','male')

Отображение отфильтрованных / отсортированных результатов

Есть моменты, когда мы хотим отобразить отфильтрованную или отсортированную версию массива без изменения исходных данных:

<li v-for="n in evenNumbers">{{ n }}</li>
data: {
  numbers: [ 1, 2, 3, 4, 5 ]
},
computed: {
  evenNumbers: function () {
    return this.numbers.filter(function (number) {
      return number % 2 === 0
    })
  }
}

Для выполнения вложенных для tate, пожалуйста, используйте метод для обработки этого:

<li v-for="n in even(numbers)">{{ n }}</li>
data: {
  numbers: [ 1, 2, 3, 4, 5 ]
},
methods: {
  even: function (numbers) {
    return numbers.filter(function (number) {
      return number % 2 === 0
    })
  }
}

V-для с диапазоном

V-for также может принимать целое число в качестве параметра цикла:

<div>
  <span v-for="n in 10">{{ n }} </span>
</div>

v-for на <шаблон >>

мы можем визуализировать блок из нескольких элементов в v-for, используя <template>:

<ul>
  <template v-for="item in items">
    <li>{{ item.msg }}</li>
    <li class="divider" role="presentation"></li>
  </template>
</ul>

V-для с V-если

всякий раз, когда v-for и v-if используются в одном и том же узле, v-for имеет более высокий приоритет, чем v-if.

V-для с компонентом

Как и любой обычный элемент, мы можем напрямую использовать v-for для пользовательского компонента:

<my-component v-for="item in items" :key="item.id"></my-component>

Однако вам нужно будет использовать опору для автоматической передачи любых данных:

<my-component
  v-for="(item, index) in items"
  v-bind:item="item"
  v-bind:index="index"
  v-bind:key="item.id"
></my-component>

Ниже приведен пример кода для простого приложения To-Do

<div id="todo-list-example">
  <form v-on:submit.prevent="addNewTodo">
    <label for="new-todo">Add a todo</label>
    <input
      v-model="newTodoText"
      id="new-todo"
      placeholder="E.g. Feed the cat"
    >
    <button>Add</button>
  </form>
  <ul>
    <li
      is="todo-item"
      v-for="(todo, index) in todos"
      v-bind:key="todo.id"
      v-bind:title="todo.title"
      v-on:remove="todos.splice(index, 1)"
    ></li>
  </ul>
</div>
Vue.component('todo-item', {
  template: '\
    <li>\
      {{ title }}\
      <button v-on:click="$emit(\'remove\')">Remove</button>\
    </li>\
  ',
  props: ['title']
})
new Vue({
  el: '#todo-list-example',
  data: {
    newTodoText: '',
    todos: [
      {
        id: 1,
        title: 'Do the dishes',
      },
      {
        id: 2,
        title: 'Take out the trash',
      },
      {
        id: 3,
        title: 'Mow the lawn'
      }
    ],
    nextTodoId: 4
  },
  methods: {
    addNewTodo: function () {
      this.todos.push({
        id: this.nextTodoId++,
        title: this.newTodoText
      })
      this.newTodoText = ''
    }
  }
})

Новый контент: Composer: менеджер зависимостей для PHP , R программирования


script1adsense4code
script1adsense5code
disqus2code
script1adsense6code
script1adsense7code
script1adsense8code
buysellads2code