2013-11-29 5 views
1

я создал следующую директиву:Как передать область действия в директиву?

app.directive('myActivity', function() { 
     return { 
      restrict: "A", 
      template: "<div class='activity-mask' data-ng-show='loading!=0'>" + 
         "<span>Loading... {{ loading }}</span>" + 
         "</div>" + 
         "<div class='activity-mask' data-ng-show='fetching!=0'>" + 
         "<span>Fetching... {{ fetching }}</span>" + 
         "</div>" 
     }; 
}); 

директива, кажется, не замечает $ объема. Как я могу передать в области, чтобы я мог видеть значения $ scope.fetching и $ scope.loading?

+0

Поскольку ваша директива не создает изолированную область видимости, она может получить доступ к элементам родительской области без каких-либо проблем. – Chandermani

ответ

3

Используйте изолят прицел с @, так как вы хотите передать только для чтения значений в директиве:

app.directive('myActivity', function() { 
    return { 
     restrict: "A", 
     scope:{ 
      loading:"@", 
      fetching:"@" 
     }, 
     template: '<div>...</div>' 
    }; 
}); 

HTML:

<div my-activity loading="{{loading}}" fetching="{{fetching}}"></div> 

Этот подход безопасен и не загрязняет родительской области : Fiddle

Однако если вы хотите, чтобы директива разделить сферу родителя, вот демо скрипку: Fiddle

Другой безопасный способ заключается в создании двумерная связывания:

app.directive('myActivity', function() { 
     return { 
      restrict: "A", 
      scope:{ 
       loading : "=", 
       fetching : "=", 
      }, 
      template: '<div>...</div>' 
     }; 
}); 

HTML:

<div my-activity loading="loading" fetching="fetching"... 
+0

Спасибо, но мне просто нужно одностороннее связывание. Было бы проще? Номера устанавливаются вне директивы и только для чтения внутри директивы. Могу ли я передать всю переменную $ в директиву? –

+0

@SamanthaJ Взгляните на мое обновление. – AlwaysALearner

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