Подтвердить что ты не робот

Angular 2 ленивых метода загрузки

Я уже написал большое приложение с Angular 1 и requireJS с AMD для ленивой загрузки и структурирования. Приложение не использует маршруты, но части приложения, такие как HTML, css и Javascript (angular модули), загружаются с лени.

Теперь я хочу перейти на Angular 2, и я ищу лучшую ленивую технику загрузки содержимого HTML, css и JS (angular), которая не зависит от маршрутов и которая не зависит от тысяч различных фреймворков javascript.

Таким образом, ленивые компоненты маршрута загрузки выглядят довольно просто: http://blog.mgechev.com/2015/09/30/lazy-loading-components-routes-services-router-angular-2

но как бы вы выполнили этот сценарий без маршрутов? Вы бы порекомендовали что-то вроде webpack, или я должен держать requireJS? Есть что-то вроде OClazyload для Angular 2? Или это работает как-то с Angular 2 даже без каких-либо фреймворков?

Я друг "держу это просто", и я действительно хотел бы сохранить его как можно малым и простым.

Спасибо!

4b9b3361

Ответ 1

Angular 2 основан на веб-компонентах. Самый простой способ ( "держите его простым", как вы сказали), использует маршруты и компоненты. Вы также можете загружать компоненты, просто используя директивы в своем html. например:

@Component({
  selector: 'my-component', // directive name
  templateUrl: './app/my.component.html',
  directives: []
})
export class MyComponent {}



@Component({
  selector: 'root-component', // directive name
  directives: [MyComponent],
  template: '<my-component></my-component>',
})
export class myComponent {}

если вы измените свой шаблон на динамическое включение <my-component>, он будет динамически загружать компонент. Это не лучшая практика.

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

с ним вы можете использовать:

@Component({
  selector: 'child-component',
  template: 'Child'
})
class ChildComponent {
}
@Component({
  selector: 'my-app',
  template: 'Parent (<child id="child"></child>)'
})
class MyApp {
  constructor(dcl: DynamicComponentLoader, injector: Injector) {
    dcl.loadAsRoot(ChildComponent, '#child', injector);
  }
}
bootstrap(MyApp);

В результате DOM:

<my-app>
  Parent (
    <child id="child">Child</child>
  )
</my-app>

Существует еще одна опция (см. ссылку angular2 выше), в которой вы можете предоставить поставщикам возможность настроить инжектор, подготовленный для этого экземпляра компонента.

Надеюсь, что это поможет.

Ответ 2

С angular 2 Последней версией мы можем использовать свойство loadchildren для выполнения ленивой загрузки. Например:   {       путь: "Клиент",       loadChildren: './customer.module#Customer2Module?chunkName=Customer'   },

В этом примере я использую webpack Bundling (angular 2 загрузчик маршрутизатора) + Anguar 2 Маршрутизация для ленивой загрузки модулей.

Ответ 3

https://medium.com/@daviddentoom/angular-2-lazy-loading-with-webpack-d25fe71c29c1#.582uw0wac

Предположим, что у нас есть две страницы в нашем приложении: "home" и "about". Некоторые люди могут никогда не дойти до страницы, поэтому имеет смысл только обслуживать нагрузку на странице тем людям, которые на самом деле нуждаются в ней. Здесь мы будем использовать ленивую загрузку.