Я хочу привязать функцию к угловой директиве. HTML создается с использованием функции link вместо использования свойств template
или templateUrl
в директиве. Проблема в том, что функции не могут быть связаны в первом случае.
Вот мой HTML:
<html ng-app="test">
<body>
<div ng-controller="testCtrl">
<test-dir print="printValue(val)">
</test-dir>
</div>
</body>
</html>
Это мой файл сценария:
// Code goes here
var testApp = angular.module('test', []);
testApp.controller('testCtrl', function($scope) {
$scope.printValue = function(val) {
alert(val);
}
})
testApp.directive('testDir', function() {
return {
replace: true,
restrict: 'E',
scope: {
print: '&'
} ,
link : function(scope, element, attr){
var template = "<button ng-click='print({val:\"Hello\"})'>Click</button>";
element.append(template);
}
}
})
В этом примере функция printValue
на контроллере не привязана к кнопке.
Я создал plunker для приведенного выше примера здесь
Если бы я использовал свойство шаблона директивы для создания HTML, то тот же пример отлично работает.
Я создал еще один плункер для примера с использованием свойства template Here
Итак, мой вопрос: как я могу привязать функцию в первом примере? Я должен создать HTML с помощью функции ссылки, потому что HTML должен создаваться динамически, это просто упрощение реальной проблемы.
Вам нужно $compile
html-шаблон.
Добавьте это после element.append()
:
$compile(element.contents())(scope);
Вот рабочая вилка вашего plnkr.
Для получения дополнительной информации проверьте документацию для $compile
в $compile
угловой.
restict
чтобыrestrict