Я создаю directive
в angularJS
который заменит мой пользовательский элемент с некоторыми элементами (постраничным), элементами, которые генерируются с помощью directive
имеет ng-click
атрибут и значение из ng-click
атрибута является функцией контроллера, но ng-click
не работаетнг-клик не работает, если элемент генерируется в соответствии с директивой
элемент является
<my-element totalCount="5"></my-element>
контроллер
.controller('AppControler',['$scope'],function($scope){
$scope.function1 = function(value){
console.log('in function1 value = '+value);
}
});
Директива
.directive('myElement',function(){
return{
restrict: 'E',
replace: true,
scope:{
totalCount: '@'
},
template: '<ul class="pagination"></ul>`,
controller: function($scope, $element, $attrs){
$scope.draw = function(){
$($element).empty();
for (var i=1; i<=$scope.totalCount; i++){
var link = $('<li><a href="javascript:;" ng-click="function1('+i+');">'+i+'</a></li>');
$($element).append(link);
}
}
},
link: function(scope, element, attr, controller){
attr.$observe('totalCount', function(){
scope.draw();
});
}
};
});
Но когда я нажимаю на <li>
элемента, function1
из AppController
не вызывается.
Update1
На самом деле мой directive
имеет isolate-scope
и если я скомпилировать элемент с $($element).append($compile(link)($scope));
тогда элемент, связанный с областью в директивы, но я хочу, чтобы скомпилировать элемент с областью родительского
UPDATE2
Я внесли некоторые изменения в мой элемент, например
<my-element totalCount="5" func-to-call="function1()"></my-element>
В директиве
.directive('myElement',function($compile){
return{
...
...
scope:{
totalCount: '@',
funcToCall: '&'
},
...
controller: function($scope, $element, $attrs){
$scope.draw = function(){
....
....
var link = $('<li><a href="javascript:;" ng-click="function2('+i+');">'+i+'</a></li>');
$($element).append($compile(link)($scope));
....
....
}
$scope.function2 = function(value){
console.log('function2 value = '+value);
$scope.funcToCall(value);
}
}
....
....
};
});
в этом случае function2 директивной рамка зовет и печать значения в консоли, но $ рамки.funcToCall (значение) дает ошибку в
TypeError: Cannot use 'in' operator to search for 'function1' in <3>
Update3
Создано PLUNKER
Родительская область ограничена в директиве '' myElement'', поскольку она имеет '' выделенную область''. Чтобы вызвать функцию в контроллере из директивы, необходимо передать функцию контроллера в директиву и передать ее как область с помощью '' & '' внутренней директивы. См. Https://weblogs.asp.net/dwahlin/creating-custom-angularjs-directives-part-2-isolate-scope. Надеюсь, что это поможет и, если возможно, создаст скрипку или плункер, реплицирующую эту проблему. –
@SameerK Ссылка на плункер добавлена, если вы нажмете на какой-либо номер страницы, вы получите ошибку – Dau
Вы пропустили значение пропуска в директивном вызове '' ' '. См. Рабочий PLUNKER по адресу http://plnkr.co/edit/LFgiTyG5zcSdqfkGq1qZ?p=preview. Я изменил параметры, переданные функции контроллера. используя справочный метод. –