Как передать значение атрибута родительской директивы в область дочерних директив через 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 }}">'
};
});