Я искал все, и единственное, что я могу придумать, это то, что я не понимаю ничего принципиального в том, как работает функция компиляции.Доступ к контроллеру из функции компиляции в директивах
Вот что у меня есть
angular.module("app", [])
.directive("foo", function(){
return {
scope: {},
controller: function() {
this.someValue = 23;
},
contollerAs: "ctrl",
compile: function(tElem, tAttrs) {
tElem.html("<h1>Data: {{ctrl.someValue}}</h1>");
},
template: '<h1>test</h1>'
}
});
Здесь отображается: данные: и не похоже, чтобы увидеть "SomeValue" переменной. Однако, когда я использую scope вместо синтаксиса controllerAs, он работает.
//this works fine
angular.module("app", [])
.directive("foo", function(){
return {
scope: {},
controller: function($scope) {
$scope.someValue = 23;
},
contollerAs: "ctrl",
compile: function(tElem, tAttrs) {
tElem.html("<h1>Data: {{someValue}}</h1>");
},
template: '<h1>test</h1>'
}
});
Это показывает: данные: 23
Есть ли что-то я здесь отсутствует? Я даже правильно использую компиляцию? Руководство кажется менее полезным.
Ничего себе, полностью смущен. Я не могу поверить, что не видел, что через 2 часа смотрел на этот кусок кода! Не могли бы вы также объяснить, по возможности, для чего предназначена функция компиляции. Что бы он никогда не использовал, если связь, контроллер и шаблон позаботятся обо всем. Есть ли в этом случае прецедент? – MadOgre
Это вопрос вкуса и практических проблем. Цель 'compile' заключается в изменении шаблона и возврате функции предварительной ссылки и/или пост-ссылки. Я считаю, что он был там до 'шаблона' и оставался по историческим причинам. Обычно функции 'template' и' controller' и/или link ($ onInit и $ postLink перехватывают контроллер в 1.5+). – estus