Я использую ng-repeat, и мне нужно передать переменную области видимости в функцию компиляции директивы. Я знаю, как это сделать со ссылкой, но не с функцией компиляции.Я могу передать переменную области видимости в функцию ссылки директивы, но не функцию компиляции, угловую
Мой HTML выглядит следующим образом:
<div ng-repeat="item in chapter.main">
<block type="item.type"></block>
</div>
Скажем item.type = "бла" независимо от пункта. Тогда эта функция отлично работает ссылка
app.directive('block', function() {
return {
restrict: 'E',
link: function(scope, element, attributes){
scope.$watch(attributes.type, function(value){
console.log(value); //will output "blah" which is correct
});
}
}
});
Но я не могу сделать то же самое с компиляцией?
app.directive('block', function() {
return {
restrict: 'E',
compile: function(element, attrs, scope) {
scope.$watch(attrs.type, function(value){
console.log(value);
});
}
}
});
Я получаю ошибку "не может прочитать свойство $ часов неопределенного" ..
Это, как я хотел бы свою директиву выглядеть следующим образом:
app.directive('block', function() {
return {
restrict: 'E',
compile: function(element, attrs) {
element.append('<div ng-include="\'{{type}}-template.html\'"></div>');
//or element.append('<div ng-include="\'{' + attrs.type + '}-template.html\'"></div>');
//except the above won't interpret attr.type as a variable, just as the literal string 'item.type'
}
}
});
Вот интересный [статья] (http://www.jvandemo.com/the-nitty- gritty-of-compile-and-link-functions-inside-angularjs-директивы /) о 'компиляции' и о том, как это работает в' Angularjs'. – themyth92