Как вызвать функцию после добавления html в директиву
viewBannerCtrl - это контроллер, так как я использую директиву customTable. Здесь я не могу получить доступ к функции "VBC.bannerAlert()" из директивы, и я добавил код в директиву, но не могу получить доступ к функциям контроллера с помощью тега добавления
.controller('viewBannerCtrl',function(){
vbc.bannerAlert = function(){
alert('success called in inside directive.....Hurry!!!!!!!!!!!!!!!!!!');
};
});
.directive('customTable', function customTable($compile) {
return {
restrict: 'EA',
templateUrl: 'app/admin/modules/common/views/custom_table.html',
scope: {
data: '=data',
dataLength: '=datalength',
filterDataArray: '=filterData',
imageData: '=imageData'
},
controller: customTableCtrl,
link:function(scope,element,attr){
var el = angular.element(document.getElementById('dyanamicActions'));
el.append('<button class="btn btn-danger btn-rounded btn-ef btn-ef-5 btn-ef-5b" ng-click="VBC.bannerAlert()"><i class="fa fa-trash"></i> <span>Deletess</span></button>');
$compile(el)(scope);
},
controllerAs: 'CTC',
bindToController: true
};
});
function customTableCtrl(MainService) {
var ctc = this;
};
}
<div custom-table data="VBC.getBannerlistData" datalength="VBC.totalItems"
table-headers="VBC.tableInit" image-data="'image'"
table-actions="VBC.editData" delete-model="VBC.openBannerDeleteModal">
</div>
1 ответ
Ваша текущая директива реализована с использованием изолированной области видимости, как scope: { ... }
, Таким образом, директива не имеет методов внешней области видимости (в ней нет наследования прототипов, когда область видимости изолирована).
Вы должны пройти bannerAlert
Выражение функции в директиву из изолированной области видимости, используя &
, Так что эта функция станет доступной внутри области действия директивы.
Для передачи этой функции в директиву вы должны написать атрибут bannerAlert="bannerAlert()"
на директивном элементе. Как я показал ниже.
наценка
<div custom-table data="VBC.getBannerlistData"
datalength="VBC.totalItems"
table-headers="VBC.tableInit"
image-data="'image'"
table-actions="VBC.editData"
delete-model="VBC.openBannerDeleteModal"
bannerAlert="bannerAlert()">
</div>
Код
scope: {
data: '=data',
dataLength: '=datalength',
filterDataArray: '=filterData',
imageData: '=imageData',
bannerAlert: '&bannerAlert' //<--added expression binding here
},