2016-03-14 9 views
0

У меня есть контроллер, который я хочу использовать в моей директиве, как я могу использовать контроллер для директивы, я хочу получить доступ ко всем функциям контроллера в директиве?Как использовать контроллер в директивах AngularJs?

directive.js

angular.module('App').directive('deleteButtons', function (prcDeleteFactory,$rootScope) { 
    'use strict'; 
    return{ 
    restrict:'E', 
    scope:{ 
    id: '=ids', 
    name: '@' 
    }, 
    templateUrl:'scripts/common/prcDeleteDirective.html', 
    link:function(scope){ 
    scope.deleteButton = function(){ 
     if(scope.name === 'process') { 
     prcDeleteFactory.deleteObj(scope.name,scope.id); 
     $rootScope.$broadcast('event'); 
     } else if(scope.name === 'risk') { 
     prcDeleteFactory.deleteObj(scope.name,scope.id); 
     } else if(scope.name === 'control'){ 
     prcDeleteFactory.deleteObj(scope.name,scope.id); 
     } 
    } 
    }  
    } 

}); 

Ctrl.js

angular.module('App').controller('ProcessCtrl', function($scope) { 
        'use strict'; 
        $scope.confirmationWin = function(){ 
        console.log('Print value'); 
        }; 
        }); 

ответ

1

Вы можете определить контроллер, используя анонимную функцию или путем передачи строки существующей функции контроллера, зарегистрированного на том же модуле, как показано ниже ,

return { 
     restrict:'E', 
     controller : 'ProcessCtrl' 
    }; 

Как вы используете isolated scope для вашей директивы, чтобы получить доступ к свойствам и методам контроллера, вы должны были определить controller явно.

Если вы не хотите использовать изолированную область видимости, вы можете удалить свойство scope из вашего объекта определения директивы, который вы возвращаете. Значение по умолчанию: false, что означает, что ваша директива будет иметь одинаковую область действия контроллер вмещающего контейнера. Вы можете установить scope : true, что означает, что ваша директива получит новую область действия, которая прототипически наследует все методы и свойства от встроенного контроллера.

Для получения дополнительной информации о области действия директив вы можете обратиться к этому link.

+0

Спасибо, что помогли решить проблему – hussain

0

в вашей директиве вы можете использовать

controller : 'ProcessCtrl', 
controllerAs: 'vm', 
bindToController: true 

и затем свойства контроллера доступа в шаблоне директивы с vm.confirmationWin, например

+0

так с кодом выше в вопросе только добавить свойства, как вы упомянули, вы работаете shoudl, как насчет функции ссылок, мне все еще нужно? – hussain