Каков правильный способ добавления обработчиков событий для переноса содержимого? Я не хочу, чтобы потребители моей директивы добавляли свои собственные обработчики кликов в документ. Директива должна справиться с этим. Но я не уверен, как правильно добавить обработчиков в контент, переданный с помощью ng-transclude.Добавить обработчики событий в контент застройки AngularJS
Fiddle вокруг: https://jsfiddle.net/hoe71p0e/12/ (не может получить Angular.js и JSFiddle работать, моя функция ссылка не вызывается)
foo.html
<my-foo>
<button type="button">Foo</button>
</my-foo>
Foo .js
return {
template: "<div class='my-foo' data-ng-transclude></div>"
link: function($scope, $elem, $attrs, $ctrl, $transclude) {
$scope.foo = function() {
console.log("this is never called");
};
$transclude(function(clone) {
for (var i in clone) {
if (clone[i].localName === "button") {
angular.element(clone[i]).attr("data-ng-click", "foo()");
}
}
});
}
};
ожидается результат (кнопка, нажав должен вызвать Foo)
<div class="my-foo">
<button type="button" data-ng-click="foo()">Foo</button>
</div>
фактический результат (кнопка, нажав ничего не делает)
<div class="my-foo">
<button type="button">Foo</button>
</div>
Обратите внимание, атрибут на кнопку data-ng-click
отсутствует.
Кроме того, я видел несколько примеров, с чем-то вроде этого ...
broken.js
$transclude(function(clone) {
angular.element(clone).find("button");
});
... но не потому, что те, .find()
не возвращается с результатами, хотя инспектор, похоже, думает, что клон содержит «кнопку».
это не совсем очевидно, что вы пытаетесь сделать здесь. Какова фактическая цель, которую вы пытаетесь достичь?Я не уверен, что я когда-либо сталкивался с причиной для директивы по расширению другого контента таким образом. – Claies
Я думаю, что OP просто хочет назвать свое событие «ng-click» в transcluded директиве и объясняет, что они пробовали до сих пор – scniro
Я добавил примечание, объясняющее, что я не хочу, чтобы потребители моей директивы требовались написать обработчик кликов, чтобы заставить директиву работать. В принципе, моя директива должна иметь требуемый «кнопочный» ребенок, но директива должна обрабатывать поведение нажатия кнопки; потребитель не должен нести ответственность. –