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

Динамические и асинхронные компоненты

script1adsense2code
script1adsense3code

поддерживать динамические компоненты

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

<component v-bind:is="currentTabComponent"></component>

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

Например, у вас есть приложение, в котором есть вкладка «Сообщения» и вкладка «Архив». Когда мы выбираем вкладку и переключаемся на вкладку «Архив», публикация будет отменена, поскольку Vue создаст новый экземпляр currentTabComponent.

Воссоздание динамических компонентов обычно является полезным поведением, но в приведенном выше случае нам бы очень хотелось, чтобы эти компоненты вкладок кэшировались при их первом создании.

Мы достигаем этого, оборачивая наш динамический компонент элементом <keep-alive>:

<keep-alive>
  <component v-bind:is="currentTabComponent"></component>
</keep-alive>

Асинхронные компоненты

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

Vue.component('async-example', function (resolve, reject) {
  setTimeout(function () {
    // this will Pass the component definition to the resolve callback
    resolve({
      template: '<div>I am async!</div>'
    })
  }, 1000)
})

Из приведенного выше фрагмента кода фабрика получает обратный вызов разрешения, который должен вызываться при получении определения нашего компонента с сервера.

Рекомендуемая альтернатива использованию setTimeout - использование асинхронных компонентов и функции разделения кода в Webpack:

Vue.component('async-webpack-example', function (resolve) {
// This special require syntax below will instruct Webpack to
  // automatically split your built code into bundles that
  // are loaded from an Ajax request.
    require(['./my-async-component'], resolve)
})

Кроме того, мы можем вернуть Promise в заводской функции, поэтому с ES6 и Webpack 2 мы можем сделать следующее:

Vue.component(
  'async-webpack-example',
  // The `import` function below returns a Promise.
  () => import('./my-async-component')
)```
When registering locally, we can also directly provide a function that returns a Promise:
```new Vue({
  // ...
  components: {
    'my-component': () => import('./my-async-component')
  }
})

Если вы предпочитаете использовать Browserify, а также хотите использовать асинхронные компоненты, обратите внимание, что создатель Browserify дал понять, что это не то, что Browserify никогда не будет поддерживать.

Состояние погрузки

Фабрика асинхронных компонентов также может возвращать объект в следующем формате:

const AsyncComponent = () => ({
  // The component to be load (should be a Promise)
  component: import('./MyComponent.vue'),
  // this is a component to use while the async component is loading
  loading: LoadingComponent,
  // A component to use if the load fails
  error: ErrorComponent,
  // this will Delay before showing the loading component. The Default is: 200ms.
  delay: 200,
  // The error component will then be displayed if a timeout is
  // provided and is exceeded. Default: Infinity.
  timeout: 3000
})

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


script1adsense4code
script1adsense5code
disqus2code
script1adsense6code
script1adsense7code
script1adsense8code
buysellads2code