Как вызвать функцию после добавления 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
},
Другие вопросы по тегам