Я понимаю, что я могу динамически установить templateUrl базу по опциону DOM атрибут template-url="foo.html"
дал следующий код:Угловой: получить URL шаблона из родительской директивы
angular.module('foo').directive('parent', function() {
return {
restrict: 'E',
link: function(scope, element, attrs) {
// code
},
templateUrl: function(elem,attrs) {
return attrs.templateUrl || 'some/path/default.html'
}
}
});
Однако, мне нужно принять это шаг вперед и передайте эту строку на один уровень глубже, до детской директивы.
Учитывая этот HTML:
Использование в главном проекте
<parent parent-template="bar.html" child-template="foo.html"></parent>
Ребенок не будет подвергаться в большинстве случаев, так что если child-template
установлен, он должен неявно заменить templateUrl
для все дочерние элементы <child></child>
, которые находятся в родительском foo.html
.
Атрибут require: '^parent'
передает данные из области действия в область видимости, но я не вижу этого в templateUrl
, когда он объявлен.
foo.html
<h1>Title</h1>
<child ng-repeat="item in array"></child>
Директивы
angular.module('foo').directive('parent', function() {
return {
restrict: 'E',
link: function(scope, element, attrs) {
// code
},
templateUrl: function(elem,attrs) {
return attrs.parentTemplate || 'some/path/default.html'
},
scope: {
childTemplate: '=childTemplate'
}
}
})
.directive('child', function() {
return {
restrict: 'E',
link: function(scope, element, attrs) {
// code
},
templateUrl: function(elem,attrs) {
return ??? // parent.attribute.childTemplate? || 'some/path/default.html'
},
require: '^parent',
scope: {
childTemplate: '=childTemplate'
}
}
});
Я просто с ума правку в код, пожалуйста, убедитесь, что я изменил правильно (вы назвали вторую директиву 'parent', так же, как и первый, я думаю, что ты хотел, чтобы называться' child'). Благодаря! – Josep
Это правильно.Скопируйте/вставьте ошибку, спасибо! – Brian
Возможно ли, что 'childTemplate', прикрепленный к области директивы' child', перезаписывает родительский? – dopatraman