2016-10-02 9 views
0

Примечание: ui-grid - это имя моей настраиваемой сетки. Прошу прощения за путаницу.пользовательские директивы - дочерние директивы не отображаются, если они включены в родительскую директиву

У меня есть настраиваемая директива, которая будет иметь дочернюю настраиваемую директиву и будет вызываться таким образом в html.

<ui-grid resource="/api/data.json"> 
      <ui-gridcolumns> 
      </ui-gridcolumns> 
     </ui-grid> 

Когда директива ребенка заключена в родительской директиве, операторы консоли не печатают, но когда директива ребенок находится вне родительской директивы, она печатает console.log просто отлично. Любое понимание того, как заставить его работать с дочерней директивой в родительской директиве, оценивается.

родительская директива:

module.exports = function() { 
    return { 
     restrict: 'E', 
     templateUrl: 'app/ui-grid/grid.template.html', 
     link: function (scope, element, attrs) { 
      console.log('linked Grid'); 
     }, 
     controller: ['$scope', function ($scope) { 
      $scope.onthescreen = 'test value'; 
     }] 
    }; 
}; 

Ребенок директива:

module.exports = function() { 
    return { 
     restrict: 'E', 
     templateUrl: 'app/ui-grid/gridcolumns/grid.columns.template.html', 
     link: function (scope, element, attrs) { 
      console.log('linked Grid Columns'); 
     }, 
     controller: ['$scope', function ($scope) { 
      console.log('calling Grid Columns'); 
     }] 
    }; 
}; 

Весь базовый код в мерзавцем для справки.

https://github.com/eshrinivasan/angular-gulp-browserify-boilerplate

+1

, если вы хотите, чтобы ваш родитель, чтобы обернуть его ребенок, вам придется использовать 'transclusion', так что дочерние элементы получат w записанный в шаблон родителя. в противном случае родительский шаблон * перезаписывает * содержимое элемента, а дочерние элементы по существу удаляются из DOM вместе. – Claies

+0

также, вы можете рассмотреть свое имя здесь; многие люди могут быть смущены вашим вопросом, поскольку уже существует угловая библиотека [ui-grid] (http://ui-grid.info/), может показаться, что вы пытаетесь что-то сделать с этой библиотекой а не с вашими собственными директивами. – Claies

ответ

0

Для достижения желаемого использования поведения включения:

конфигурация:

restrict: 'E', 
templateUrl: 'app/ui-grid/grid.template.html', 
link: function (scope, element, attrs) { 
    console.log('linked Grid'); 
}, 
controller: ['$scope', function ($scope) { 
    $scope.onthescreen = 'test value'; 
}], 
transclude: true 

и где-то в шаблоне:

<div ng-transclude> 
    child directives will be placed here 
</div> 
Смежные вопросы