2014-06-23 10 views
5

tworzę dyrektywę dateRangePicker że Oświadczam tak:Deklarowanie kompleks obiekt w odizolowanych zakresu

<date-range-picker start="schedule.start" end="schedule.end"></date-range-picker> 

Moja dyrektywa jest zadeklarowany jako następujący:

.directive("dateRangePicker", function() { 
     return { 
      restrict: 'E', 
      require: '^form', 
      scope: { 
        start: '=', 
        end: '=' 
      }, 
      replace: true, 
      templateUrl: 'dateRangePicker.tpl.html', 
      link: function (scope, elm, attrs, ctrl) { 

Problem jest, że mój szablon: dateRangePicker.tpl.html inicjuje zakres podrzędny (komponent DatePicker angular-ui wykonuje to za pośrednictwem odpowiedniego kontrolera), więc każda próba zapisu wartości do scope.start lub scope.end nie wpłynie na zakres dyrektywy.

Chciałbym zadeklarować moją samodzielnie zakresu, tak, że konflikt nie wystąpią:
scope.schedule.start i scope.schedule.end.

Próbowałem to zrobić:

return { 
      restrict: 'E', 
      require: '^form', 
      scope: { 
       schedule: { 
        start: '=start', 
        end: '=end' 
       } 
      } 

Ale ten błąd:
Error: 'undefined' is not a function (evaluating 'definition.match(LOCAL_REGEXP)')

Czy istnieje sposób, aby to osiągnąć stosując pojedyncze zakresu?

Po prostu nie chcę rozmnażać zakresów przez scope:false (to działa, przetestowałem), aby zachować dobrą enkapsulację.

Odpowiedz

6

Możesz przekazać obiekt złożony do zakresu, ale nie używając składni, której użyłeś. Twój zakres rodzic powinien mieć plan obiektu, a następnie w html można zrobić

<date-range-picker schedule="schedule"></date-range-picker> 

Teraz można go używać w odizolowanych zakresu przy użyciu składni zaznajomieni

scope :{ 
    schedule:'=' 
} 
+0

doskonała, dzięki – Mik378

Powiązane problemy