2014-10-30 2 views
0

Я использую синтаксис controllerAs с моими директивами. В моем понимании после некоторого исследования (и некоторого сканирования через документацию), transclude d элемент, кажется, не наследует область выделения из-за ng-transclude, просто добавляя элемент после директивы (являясь родным братом, например, адресованным в this question).Использование изолированного пространства директивы внутри элемента transcluded

Есть ли чистый способ использовать область выделения моей директивы через свой зацепленный элемент?

Для демонстрации целей plunkr.

ответ

0

Чистейший способом было бы использовать transclude параметр в функции link директивы, как указано here (Transclusions and Scopes by Jesus Rodriguez.

фрагмента взят из источника:

.directive('person', function() { 
    return { 
     restrict: 'EA', 
     scope: { 
      header: '=' 
     }, 
     transclude:true, 
     link: function(scope, element, attrs, ctrl, transclude) { 
      scope.person = { 
       name: 'Directive Joe', 
       profession: 'Scope guy' 
      }; 

      scope.header = 'Directive\'s header'; 
      transclude(scope, function(clone, scope) { 
       element.append(clone); 
      }); 
     } 
    }; 
}); 

функция transclude принимает функцию и необязательный первый параметр. Что делает эта функция, так это клонировать транквилированный html, а затем вы можете делать с ним то, что хотите. Если вы поместите область видимости в качестве первого параметра, эта область будет использоваться для клонированного элемента. Функция обратного вызова transclude получит клонированную DOM, а также область, прикрепленную к ней.

В этом случае мы используем родительскую область директивы (в данном случае один контроллер) как область транскодированного html, а затем мы получаем ее в функции обратного вызова. Что мы делаем здесь, просто добавим его в элемент DOM нашей директивы. В случае мы имели шаблон на директивы, мы могли бы извлечь DOM элемент, а затем использовать его для добавления HTML включены через, то есть то, что я называю полный контроль :)

Также transclude г элементы добавляются к директива, наследующая родительский $scope вместо директивы. Более подробную информацию можно найти here

0

Если я правильно понял, вам просто нужно изменить на:

<that obj="dis.obj"> 
    ThatCtrl: {{ dis.obj }} 
</that> 

Кроме того, вам не нужен obj атрибут:

<that>ThatCtrl: {{ dis.obj }}</that> 
+0

Я попытался воспроизвести мою проблему простейшим способом. Я прошу прощения за то. Что, если, например, я должен был передать '' 'dis.obj''' директиву, потому что это API для некоторых методов? – srph

Смежные вопросы