Это моя идея, надеюсь, что это сработает. Попробуйте использовать контроллер директивы
.directive('someHandler', function() {
return {
//...previous arguments
controller: function ($scope, $element, $attrs) {
$scope.YourFunction = function() {
//Your code
}
}
});
, а затем вызвать $ scope.YourFunction() в контроллере.
Сложение
, если вы хотите использовать функцию из родительской директивы, вы должны включать в себя требуется аргумент в директиве ребенка. Таким образом, вы создаете иерархические отношения и позволяете общаться между ними.
После этого вы должны использовать функцию связи для вызова функции из родительского контроллера.
В вашем случае, директива ребенок будет выглядеть следующим образом:
.directive('childsomeHandler', function() {
return {
//...previous arguments
require:"^someHandler", //here is inheritance to make communication between child and parent diretctive
link: function (scope, element, attrs, someHandlerCtrl) {
someHandlerCtrl.YourFunction();
}
});
Читая эту post, вы будете знать, когда использовать ссылку и контроллеры. Для получения дополнительной информации прочтите эту замечательную статью: https://thinkster.io/egghead/directive-communication/
В конце концов, я надеюсь, что это будет полезно для вас.
Директивы ребенка могут «требовать» родителя. Угловой передаст экземпляр родительского контроллера в качестве 4-го аргумента функции «link» дочернего элемента. https://docs.angularjs.org/guide/directive –
Да, но я хочу, чтобы это было не у детей. Я хочу это на mainController. Контроллер представления. –
звучит как ваш 'users' является моделью для этой директивы. Затем определите его как таковой. Не создавайте 'users' в директиве. Использовать 'ngModel' – akonsu