Что такое компонент в AngularJS?

Я читал о директивах и задавался вопросом, в чем разница между директивой и компонентом, когда обнаружил, что в AngularJS много компонентов.

Существует компонент функции, компонент типа, компонент службы, компонент фильтра, компонент поставщика и т. д. Затем, в довершение всего, я обнаружил, что компонент модуля — это компонент, состоящий из директив, служб, фильтров, поставщиков, шаблонов, глобальных API. и тестирование моков. Это, как правило, делало вещи еще более запутанными. Я не смог найти определение «компонента» в документации Angular, которое объясняло бы различия между перечисленными типами компонентов.

Так что же такое «компонент» в AngularJS? Это что-то столь же простое, как повторно используемые блоки кода?

Кстати, сейчас я использую Angular версии 1.4.2.


person James Drinkard    schedule 04.11.2015    source источник
comment
Вы можете называть компонентом любую вещь, которая может быть составной. Вы можете определить директиву и составить ее с другим членом вашего кода. Обычно люди называют повторно используемые блоки компонентом.   -  person Errorpro    schedule 04.11.2015
comment
AngularJS и Angular (на данный момент) означают две разные вещи. Возможно, вы хотели, чтобы AngularJS и Angular означали одно и то же?   -  person Peter Mortensen    schedule 31.08.2018
comment
Нет, фреймворк различал компоненты между версиями, о которых я не знал, когда задавал вопрос. Я опубликовал это и ответ только для того, чтобы помочь другим разработчикам, особенно исходя из опыта Java, такого как я, этот конкретный вопрос в его узкой сфере.   -  person James Drinkard    schedule 31.08.2018


Ответы (3)


Компоненты Angular были представлены в версии 1.5.

Компонент — это упрощенная версия директивы. Он не может выполнять манипуляции с домом (не связывать или компилировать методы), и «замена» тоже исчезла.

Компоненты "restrict: E", и они настраиваются с использованием объекта (а не функции).

Пример:

  app.component('onOffToggle', {
    bindings: {
      value: '=',
      disabled: '='
    },
    transclude: true,
    template: '<form class="form-inline">\
                       <span ng-transclude></span>\
                       <switch class="small" ng-model="vm.value" ng-disabled="vm.disabled"/>\
                     </form>',
    controllerAs: 'vm',
    controller: ['$scope', function($scope) {
      var vm = this;
      $scope.$watch("vm.disabled", function (val) {
        if (!val) {
          vm.value = undefined;
        }
      })
    }]
  });

Дополнительная литература: https://toddmotto.com/exploring-the-angular-1-5-component-method/

person Stefan Norberg    schedule 23.02.2016
comment
В этом вопросе есть небольшая путаница терминов. Автор говорил о «компоненте» как об общем термине и, кажется, задавал вопрос в духе «что такое все эти разные вещи, такие как фильтры, сервисы и т. д.». (Похоже, они немного запутались и, возможно, им нужно изучить некоторые основы JavaScript). Этот ответ относится именно к AngularJS component()s, что также будет искать большинство людей. На самом деле, этого даже не было в версии 1.4.2, которую использовал спрашивающий. - person ChrisM; 02.08.2018

Исходя из опыта ООП, ориентированного на Java, я пытался различать различные компоненты Angularjs, включая модули. Я думаю, что лучший ответ, который я нашел о модулях, был 13 шагов к модуляризации Angularjs

В контексте AngularJS модульность — это организация по функциям, а не по типу. Для сравнения, даны массивы time = [60, 60, 24, 365] и money = [1, 5, 10, 25, 50], оба одного типа, но их функции совершенно разные.

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

Так что да, для нашего кода 1.4x компоненты — это блоки повторно используемого кода, но в контексте нашей версии 1.4x я вижу шаблон модуля как повторяющуюся структуру для этих блоков кода в Angularjs, хотя до версии 1.5 он не считался настоящими компонентами. Способ реализации этих модулей дает вам тип компонента, то есть структура реализации контроллера будет отличать его от службы или поставщика, если это имеет смысл. Я также думаю, что документы Angularjs должны были решить эту проблему.

Вот базовый шаблон, который я вижу в коде Angularjs:

(function () {
    // ... all vars and functions are in this scope only
    // still maintains access to all globals
}());

Вот отличная статья о шаблоне модуля JavaScript в деталях .

person James Drinkard    schedule 05.11.2015
comment
Я заметил, что получаю отрицательные голоса за этот ответ. Если кто-то может объяснить мне, в какой части не так, пожалуйста, сделайте это, и я это исправлю. Я все еще держу его открытым, так как считаю, что некоторые его части верны. - person James Drinkard; 30.08.2018
comment
Хорошо, я вижу, что я упустил контекст версий в своем ответе. - person James Drinkard; 30.08.2018

Компонент — это строительный блок приложения Angular 2. В приложениях Angular 2 все является компонентом.

Это особый тип директивы, который всегда относится к типу «Restrict:E».

Он состоит в основном из двух частей. Один — селектор, а другой — tempate/templateUrl:

@Component({
    selector: "sample-ui",
    templateUrl: "../UI/sample.html"
})

export class CustomerComponent {
    /* Component logic */
}
person Danish Shamshad    schedule 12.03.2018
comment
Вопрос про AngularJS (1.x). - person pzaenger; 12.03.2018