Наконец-то зарелизили angular.js версии 1.5.0 которую делали с мая прошлого года.
Самая интересная для меня фича - они сделали особый вид директив который назвали компонентами. Использование метода component
вместо directive
всячески приветствуется и облегчит вам в будущем миграцию на второй angular.
Небольшой пример компонента:
myModule.component('myComponent', {
template: '<h1>Hello {{ $ctrl.getFullName() }}</h1>',
bindings: {
firstName: '<',
lastName: '<'
},
controller: function() {
this.getFullName = function() {
return this.firstName + ' ' + this.lastName;
};
}
});
В документации появилась отдельное руководство по компонентам.
Еще из интересного multi-slot transclusion - позволяет делать в одной директиве несколько именованных включений:
myModyle.component('autocompleteWidget', {
templateUrl: 'autocomplete-widget-tpl.html',
transclude: {
input: 'inputArea',
results: 'resultsArea'
}
});
<!-- autocomplete-widget-tpl.html -->
<div class="autocomplete-container">
<div class="search-area">
<div class="search-icon">
<i class="fa fa-search"></i>
</div>
<div class="search-input" ng-transclude="inputArea"></div>
</div>
<div class="results-area">
<div ng-transclude="resultsArea"></div>
</div>
</div>
Это позволит делать проще более сложные и интересные директивы. Кроме того теперь в директивах можно задавать содержимое для transclude
которое будет отображать если пользователь директивы не указал свое.
Как вы могли заметить в первом примере, появился новый магический символ для указания типа параметра у директивы <
- он означает что такой параметр имеет одностороннее связывание, т.е. директива читает значение этого параметра, но не изменяет. Это позволит убрать лишние вотчеры, что в свою очередь положительно скажется на производительности.
И еще куча других более мелких улучшений и исправлений можно найти в changelog.