2016-08-03 5 views
2
"use strict"; 

angular.module("foo") 
    .directive("breadcrumbs", function($rootScope, $timeout) { 
    return { 
     replace: true, 
     scope: false, 
     templateUrl: '/js/shared/directives/breadcrumbs.tpl.html', 
     link: function(scope, element, attrs, controller, transcludeFn){ 
      console.debug(scope.parent); 
      ... 

Иногда scope.parent является объемом текущего контроллера, иногда это $rootScope. Я обнаружил, что, когда мой заказ директива используется так:Угловой ссылка директивы() функция прием несовместимой сфера

<breadcrumbs></breadcrumbs> 

получает объем контроллера, но при использовании нг-если:

<breadcrumbs ng-if="searchData"></breadcrumbs> 

получает новую область вложен в пределах область управления.

Как написать свою директиву, чтобы всегда получать область управления, не прибегая к хакерству (например, добавление ng-if="true")?

Обновление: я исправил описание проблемы. Проблема в том, что я получаю области на разных уровнях вложенности в зависимости от того, используется ли ng-if, независимо от того, использовался ли scope: false или scope: true.

+0

См. Это https://github.com/angular/angular.js/wiki/Understanding-Scopes –

ответ

1

Что такое ng-if=true Доза создает новую область действия для вашего элемента. Вы можете achive, что путем изменения параметра

От

scope: false 

Для

scope: true 
3

Прежде всего, если директива находится в контексте видимости контроллера, вы никогда не будете получать $rootScope как область действия директивы.
При использовании ng-if, вы получаете образцово унаследованный ребенка объем (в непосредственной родительской области, в этом случае контроллера), созданный ng-if becuase вашей директивы имеет scope: false (что означает пропуск в ближайших сферах вместо создания одного)

Вы всегда можете запросить прототипно унаследованную область видимости, установив scope:true или изолированную область с помощью scope:{}.

+0

красиво объяснено –

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