Предположим, я создаю компонент AngularJS
function FooController($scope, $element, $attrs, $http) {
var ctrl = this;
ctrl.bar = "WIBBLE";
}
angular.module("app").component("foo", {
templateUrl: "/app/components/foo.html",
controller: FooController,
transclude: true
}
с таким шаблоном, который содержит тег включения с резервным содержимым
[<ng-transclude>{{$ctrl.bar}}</ng-transclude>]
и я использую его на такой странице
<foo></foo>
затем резервное содержимое выполняется в области управления, и я получаю это
[WIBBLE]
Но если я предоставлю то же самое через включение
<foo>{{$ctrl.bar}}</foo>
тогда включенный контент имеет новую область изоляции, а $ctrl.bar
не разрешается, поэтому я получаю
[]
Как установить соответствующую область?
Для директивы я бы определил функцию link
и использовал функцию transclude
для установки области действия, но component
не поддерживает функцию link
, поэтому я не могу этого сделать.
Почему Angular (1.5) компоненты всегда имеют изолированную область действия? предполагает, что это совершенно невозможно, и ответ заключается в том, чтобы вместо этого использовать директиву. Если это так, то я не уверен, в чем смысл компонентов.