2013-05-04 4 views
4

У меня есть директивное здание html на основе массива, отправленного как атрибут. Я не могу получить к нему доступ из функции компилятора директивы. Он работает внутри функции ссылки, но мне нужно внутри компиляции, иначе новый шаблон не будет скомпилирован.Как получить доступ к области действия из директивы функции компилятора?

код выглядит так:

<multirangeslider values="ranges" variances="['Master', 'master A', 'master B']"></multirangeslider> 

Директива:

angular.module("vtApp.directives"). 
directive('multirangeslider', function ($parse, $timeout, $compile) { 
    return { 
     restrict: 'E', 
     replace: true, 
     scope: { 
      values: "=", 
      options: "=", 
      variances: "&" 
     }, 
     compile: function (element, attrs) { 
      var htmlText, variances, values; 
      variances = eval(attrs.variances); 

      values = scope.ranges //scope is undefined 
      values = eval (attrs.variances) //returns string "ranges" 
      values = ??? ///what should I put here? 

      htmlText = '<div></div>'; 
      element.replaceWith(htmlText); 
      return function (scope, element, attrs){ 

      } 
     } 
    } 
}); 

Спасибо

ответ

4

Вы не будете иметь доступ к области действия до тех пор, LinkingFunction, который возвращается по вашей функции компиляции. Функция компиляции создает html-шаблон. Объем составляет объединенный с шаблоном во время LinkingFunction.

Я не совсем уверен, что вы пытаетесь сделать, но я бы использовал стандартный шаблон или объект templateUrl для функции связывания в отличие от погружения в функцию компиляции. Somethig так:

angular.module("vtApp.directives"). 
    directive('multirangeslider', function ($parse, $timeout, $compile) { 
    return { 
     restrict: 'E', 
     replace: true, 
     template: "<div ng-repeat='val in values'>{{val}}</div>", //Your template code 
     scope: { 
     values: "=", 
     options: "=", 
     variances: "&" 
     }, 
     link: function (scope, element, attrs) { 
     scope.values = eval(attrs.variances) 
     } 
    } 
    }); 

Вы можете найти более подробную информацию здесь о том, как директивы построены: https://github.com/angular/angular.js/wiki/Understanding-Directives

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