Как получить доступ к области действия из директивы функции компилятора?
У меня есть директива построения 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){
}
}
}
});
Поблагодарить
1 ответ
У вас не будет доступа к области действия, пока функция LinkingFunction не будет возвращена вашей функцией компиляции. Функция компиляции создает HTML-шаблон. Область затем объединяется с шаблоном во время LinkingFunction.
Я не совсем уверен, что вы пытаетесь сделать, но я бы использовал стандартный объект template или templateUrl в функции связывания, а не погружался в функцию компиляции. Примерно так:
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