2013-12-18 5 views
5

Я пытался понять разницу между изолированной областью и унаследованной областью действия в директиве. Это пример, который я подготовил, чтобы заставить себя понять:Директивы AngularJS - Изолированный масштаб и унаследованная область

HTML-

<div ng-controller="AppController"> 
    <div my-directive> 
     Inside isolated scope directive: {{myProperty}} 
    </div> 

    <div my-inherit-scope-directive> 
     Inside inherited scope directive: {{myProperty}} 
    </div> 
</div> 

The JS

angular.module("myApp", []) 
     .directive("myInheritScopeDirective", function() { 
      return { 
       restrict: "A", 
       scope: true 
      }; 
     }) 
     .directive("myDirective", function() { 
      return { 
       restrict: "A", 
       scope: {} 
      }; 
     }) 
     .controller("AppController", ["$scope", function($scope) { 
      $scope.myProperty = "Understanding inherited and isolated scope"; 
     }]); 

Выполнение кода с угловыми-1.1.5, она работает как Я ожидал: {myProperty} внутри моей-директивы будет undefined из-за изолированной области видимости, тогда как для my-inherit-scope-директивы {{myProperty}} будет иметь значение Understanding inherited and isolated scope.

Но выполнение с помощью Angular-1.2.1 в обоих директивах {{myProperty}} выходов Understanding inherited and isolated scope.

Все, что у меня отсутствует?

ответ

2

Текстовый узел внутри вашей директивы связан с областью контроля. Поэтому объем директивы не влияет. Я думаю, что это имеет changed от версии 1.2. Вы должны использовать шаблон для директивы:

.directive("myIsolatedDirective", function() { 
    return { 
     template: 'Inside isolated in template scope directive: {{myProperty}}', 
     restrict: "A", 
     scope: { 
      myProperty: '=' 
     } 
    }; 
}) 

Проверить this fiddle.

+0

Спасибо @Reto, тогда какая точка изолированной области видимости в v1.2, если она наследует свойство от контроллера. –

+0

Речь идет о шаблоне внутри директивы. Если вы удалите изоляцию области из 'myIsolatedDirective',' myProperty' будет привязан к области контроллера. Я думаю, что поведение в 1.1.x не предназначалось, как заявил Vojta: «Элементы Child, которые определены либо в шаблоне приложения, либо в каком-либо другом шаблоне директив, не получают область выделения. Теоретически никто не должен полагаться на это поведение, поскольку это очень редко - в большинстве случаев директива isolate имеет шаблон ». –

+0

Спасибо @ Рето или объяснение. –

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