我有一个服务功能我试图在控制器中调用。该服务还调用同一服务中的另一个功能。当我可以从控制器调用服务时,如果我明确传入第二个服务,我只能让它工作。我想要做的是能够传递一个调用第二个服务的字符串。它看起来更干净,更容易阅读。但我无法弄清楚如何做到这一点。
服务
function $cmCallOut($timeout, $cmAutoscroll) {
var service = {
runCallOut: runCallOut,
unavailable: unavailable,
destroy: destroy,
create: create,
update: update
};
return service;
function runCallOut(recordId, callout) {
// Wrap in timeout to wait for DOM to load before grabbing the element
$timeout(function() {
// Get element which to perform callout animation on
var element = angular.element('[record-id=' + recordId + ']');
// Get the elements coords so we can scroll to it
var rect = element[0].getBoundingClientRect();
// Scroll to element
$cmAutoscroll.toTop(rect.top);
// Run animation
callout(element);
});
}
function unavailable(element) {
element.velocity('callout.shake');
}
function destroy(element) {
element.velocity('transition.expandOut', {duration : 350});
}
function create(element) {
element.css('display', 'none');
element
.velocity('transition.expandIn', {duration : 450, display: 'block', delay: 350})
.velocity('callout.flash');
$timeout(function() {
element.css('transform', 'none');
}, 2000);
}
function update(element) {
element.velocity('callout.flash', {duration: 1500, delay: 350});
}
}
控制器:
$cmCallOut.runCallOut(chargeId, $cmCallOut.create);
想要这样称呼:
$cmCallOut.runCallOut(chargeId, 'create');
答案 0 :(得分:3)
由于您想要的函数是您在顶部声明的服务变量的键,因此您可以像这样调用它:
service[callout](element);
因此...
function runCallOut(recordId, callout) {
// Wrap in timeout to wait for DOM to load before grabbing the element
$timeout(function() {
// Get element which to perform callout animation on
var element = angular.element('[record-id=' + recordId + ']');
// Get the elements coords so we can scroll to it
var rect = element[0].getBoundingClientRect();
// Scroll to element
$cmAutoscroll.toTop(rect.top);
// Run by calling the function that is a key on service
service[callout](element);
});
}