У меня есть директива и контроллер. Директива определяет функцию в изолированной области. Он также ссылается на функцию в контроллере. Эта функция принимает обратный вызов. Однако, когда я вызываю его из директивы и передаю обратный вызов, обратный вызов передается как неопределенный. Код ниже сделает это более понятным:
Директива
directive('unflagBtn', ["$window", "api",
function($window, api) {
return {
restrict: "E",
template: "<a ng-click='unflag(config.currentItemId)' class='btn btn-default'>Unflag</a>",
require: "^DataCtrl",
scope: {
config: "=",
next: "&"
},
controller: ["$scope",
function($scope) {
$scope.unflag = function(id) {
$scope.next(function() { //this callback does not get passed
api.unflag(id, function(result) {
//do something
return
});
});
};
}
]
};
}
]);
Контроллер
controller('DataCtrl', ['$rootScope', '$scope', 'api', 'dataManager', 'globals',
function($rootScope, $scope, api, dataManager, globals) {
...
$scope.next = function(cb) { //This function gets called, but the callback is undefined.
// do something here
return cb ? cb() : null;
};
}
]);
HTML
<unflag-btn config="config" next="next(cb)"></unflag-btn>
Я прочитал здесь Как передать аргумент методу, определенному в контроллере, но вызываемому из директивы в Angularjs? что при передаче параметров из директив в функции контроллера параметры необходимо передавать как объекты. Итак, я попробовал что-то вроде этого:
$scope.next({cb: function() { //this callback does not get passed still
api.unflag(id, function(result) {
//do something
return
});
}});
Но это не сработало. Я не уверен, имеет ли это значение, но я должен отметить, что директива находится внутри формы, которая на своем месте находится внутри контроллера. Просто для иллюстрации структуры:
<controller>
<form>
<directive>
<form>
<controller>
Надеюсь понятно и заранее спасибо!