У меня есть два контроллера, где я делать почти то же самое, только немного изменить вещи в них, у меня есть это:Ошибка Вызывается функция из директивы внутри функции в контроллере
app.controller('CreateSignerCtrl', ['$scope','SweetAlert','SignerResource','$http', '$location', '$routeParams','$timeout','ngDialog', function ($scope, SweetAlert, SignerResource, $http, $location, $routeParams, $timeout,ngDialog) {
$scope.title = "Add Signer";
$scope.button = "Save";
$scope.Signer = {};
$scope.cancel = ngDialog.closeAll;
$scope.saveSigner = function() {
SignerResource.save($scope.Signer);
$.notify({
title: '<strong>Data Updated! </strong>',
message: 'Signer Updated.'
},{
type: 'success',
placement: {
from: 'bottom',
align: 'right'
},
animate: {
enter: 'animated fadeInDown',
exit: 'animated fadeOutUp'
}
});
ngDialog.closeAll();
$scope.getModelData();
};
$scope.save = $scope.saveSigner;
}]);
В этом контроллере когда я назвал функцию $ scope.saveSigner я получаю эту ошибку:
TypeError: $scope.getModelData is not a function
И в этом контроллере:
app.controller('EditSignerCtrl', ['$scope','SweetAlert','SignerResource','$http', '$location', '$routeParams','$timeout','ngDialog', function ($scope, SweetAlert, SignerResource, $http, $location, $routeParams, $timeout,ngDialog) {
$scope.title = "Edit Signer";
$scope.button = "Update";
$scope.Signer = SignerResource.get({
id: $scope.signerId
});
$scope.cancel = ngDialog.closeAll;
$scope.updateSigner = function() {
SignerResource.update($scope.Signer);
$.notify({
title: '<strong>Data Updated! </strong>',
message: 'Signer Updated.'
},{
type: 'success',
placement: {
from: 'bottom',
align: 'right'
},
animate: {
enter: 'animated fadeInDown',
exit: 'animated fadeOutUp'
}
});
ngDialog.closeAll();
$scope.getModelData();
};
$scope.save = $scope.updateSigner;
}]);
В этом контроллере все выполнено нормально и $ scope.getModelData не присылайте мне никаких ошибок.
Директива заключается в следующем:
app.directive('datapaginator', function() {
return {
url: '=a',
controller: function($scope, $http) {
$scope.model = [];
$scope.getModelData = function() {
$http({
url: $scope.url,
method: "GET",
params: {page: $scope.currentpage || 1}
}).success(function(data, status, headers, config) {
if($scope.currentpage > data.last_page){
$scope.currentpage = data.last_page;
$scope.getModelData();
}
$scope.currentpage = data.current_page;
$scope.lastpage = data.last_page;
$scope.generatePages(data.last_page);
$scope.model = data.data;
}).error(function(response) {
$scope.model = response.error;
});
};
});
Эта функция ($ scope.getModelData) выполняется много раз, в другом контроллере и выполняется без проблем.
Кажется, что $ scope в контроллере CreateSignerCtrl не наследуется от вашей директивы. Не лучше ли переместить функцию getModelData в службу? –
Возможно, эта функция является стандартной функцией, которая будет использоваться с любой моделью, анализирующей URL-адрес от первого контроллера модели или Сервиса. – CrafterSama