Как передать значение атрибута родительской директивы в область дочерних директив через transclude?

Я пытаюсь передать значение атрибута из директивы в область действия дочерней директивы через ng-transclude. Я пытался использовать =, @, & для привязки области, но я все еще ошеломлен. Я бы хотел, чтобы директива child наследовала атрибут от директивы parent. Любая помощь будет оценена!

Я сделал jsfiddle здесь -> https://jsfiddle.net/egdfLzLj/5/

Javascript

var app = angular.module('app', []);

app.directive('parent', function () {
    return {
    restrict: 'E',
    transclude: true,
    replace: true,
    scope: {
        label: '@'
    },
    template: '<section>' +
            '<label>{{::label}}' + 
            '<ng-transclude></ng-transclude>' +
            '</label>' +
      '</section>'
  };
});

app.directive('child', function () {
  return {
    restrict: 'E',
    replace: true,
    scope: {
      type: '@',
      label: '&'
    },
    template: '<input ng-type="type" ng-value="::label">'
  };
});

Html

<parent label="Parent Label">
  <child type="text"></child>
</parent>

1 ответ

Решение

Демо: https://jsfiddle.net/egdfLzLj/2/

HTML

<parent label="Parent Label">
    <child type="text"></child>
</parent>

директива

var app = angular.module('app', []);

app.directive('parent', function () {
    return {
    restrict: 'E',
    transclude: true,
    replace: true,
    scope: {
        label: '@'
    },
    template: '<section>' +
            '<label>{{::label}}' + 
            '<ng-transclude></ng-transclude>' +
            '</label>' +
      '</section>'
  };
})

app.directive('child', function () {
  return {
    restrict: 'E',
    replace: true,
    link: function (scope) {scope.label =  scope.$parent.label;},
    template: '<input type="text" value="{{ label }}">'
  };
});
Другие вопросы по тегам