基本上我有一个工厂
angular.module('app').factory('gService',gService);
function gService($filter, $window) {
function confirmDialog(message, success, fail) {
var confirmMessage = navigator.notification.confirm(
message,
onConfirm,
'',
[$filter('translate')('OK'), $filter('translate')('CANCEL')]
);
function onConfirm(index) {
return index === 1 ? success() : fail();
}
return confirmMessage;
}
}
我想检查此工厂外的条件,是否执行了这些功能
if(gService.confirmDialog.onConfirm){
}
这不起作用。如何检查以角度执行的功能?
答案 0 :(得分:5)
如果您检查onConfirm
事件,它将控制onConfirm
函数在gService.confirmDialog
对象上定义语句wroten。这不是异步和承诺的工作。
if(gService.confirmDialog.onConfirm){
}
您需要先 通知您的听众 。之后 听取该事件 来完成您的工作。
您可以broadcast
或emit
等待onConfirm
事件的范围事件。
angular.module('app').factory('gService',gService);
function gService($rootScope, $filter, $window) {
function confirmDialog(message, success, fail) {
var confirmMessage = navigator.notification.confirm(
message,
onConfirm,
'',
[$filter('translate')('OK'), $filter('translate')('CANCEL')]
);
function onConfirm(index) {
var result = index === 1 ? success() : fail();
$rootScope.$emit('onConfirm', result);
//or
//$rootScope.$broadcast('onConfirm', result); -> this goes downwards to all child scopes. Emit is upwarded.
}
return confirmMessage;
}
}
之后,您应该检查是否触发了onConfirm
事件。这就是你需要的控制。
function onConfirmFunction( result ){ //You will get the success or fail methods result here... };
$rootScope.$on('onConfirm', onConfirmFunction);
答案 1 :(得分:3)
你为什么不这样做。
angular.module('app').factory('gService',gService);
function gService($filter, $window) {
var obj = {
confirmDialog : confirmDialog,
onConfirm : onConfirm,
}
obj.executed = false;
function confirmDialog(message, success, fail) {
var confirmMessage = navigator.notification.confirm(
message,
onConfirm,
'',
[$filter('translate')('OK'), $filter('translate')('CANCEL')]
);
function onConfirm(index) {
if(index===1){
//I dont know you want function or returned value of function but you can use success() as well
obj.executed = success;
return success();
}else{
obj.executed = fail;
return fail();
}
}
return confirmMessage;
}
return obj;
}
你现在可以检查..
如果(gService.executed){
}
我不知道你是否忘记了,但你没有从工厂退回任何东西。
答案 2 :(得分:3)
尝试以下方法:
angular.module('app').factory('gService', gService);
function gService($filter, $window) {
var observers = [];
function observeNotify(callback) {
observers.push(callback);
}
function confirmDialog(message, success, fail) {
var confirmMessage = navigator.notification.confirm(
message,
onConfirm,
'',
[$filter('translate')('OK'), $filter('translate')('CANCEL')],
);
function onConfirm(index) {
var condition = index === 1;
observers.forEach(function(observer) {
observer(condition);
});
return condition ? success() : fail();
}
return confirmMessage;
}
}
//Outside of the factory
gService.observeNotify(function(condition){
console.log(condition);
});
通过这种方式,您可以注册将在执行onConfirm
函数
答案 3 :(得分:2)
这是你期待的吗?我不确定是什么问题。你能解释一下更多细节吗?
<!doctype html>
<html lang="en" ng-app="app">
<head>
<meta charset="utf-8">
<title>How AngularJS Works?</title>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.26/angular.js"></script>
</head>
<body ng-controller="appCtrl">
<p>Welcome to BooKart, we have collection of {{1 + ' Million'}} books.</p>
<script>
var app = angular.module('app', []);
app.factory('gService', gService);
function gService($filter, $window) {
function confirmDialog(message, success, fail) {
alert("called");
var confirmMessage = navigator.notification.confirm(
message,
onConfirm,
'', [$filter('translate')('OK'), $filter('translate')('CANCEL')]
);
function onConfirm(index) {
return index === 1 ? success() : fail();
}
return confirmMessage;
}
return {
confirmDialog:confirmDialog
}
}
app.controller("appCtrl", function ($scope, gService) {
$scope.callFun = function () {
if (gService.confirmDialog("", "","").onConfirm) {
}
};
$scope.callFun();
});
</script>
</body>
</html>
答案 4 :(得分:2)
将onConfirm转换为承诺并在承诺解决后执行某些操作。
function onConfirm(index) {
return $q(function (resolve, reject) {
index === 1 ? resolve(true) : reject(false);
});
}
$scope.callFun = function () {
gService.confirmDialog("", "","").onConfirm()
.then(function(sucess) {
successMethod();
}, function(error) {
console.error('oh no');
});
答案 5 :(得分:1)
基本上你没有返回(引用你共享的代码)来自函数gService
(你工厂的实现)的任何东西,因为你需要返回一些factory
。你的内部函数confirmDialog
返回一个对象,但外部函数gServive
dosen&t t t返回任何东西。你想要执行它的方式,你必须返回confirmDialog
回调并且必须在注入结束时执行,如
if(gServive(<..args...>).onConfirm())
如果玩具正在返回一个物体,那么
return {confirmDialog: confirmDialog(...<args>...)}
然后在注入结束
if(gService.confirmDialog.onConfirm)
注意:你的onConfirm是一个函数,通过调用它会返回一些东西,所以它必须用(...)
调用,它实际上听起来像一个事件附加功能这将完成回调和触发,但你的代码不会这样说。在这种情况下,您可以维护一个承诺,并在onConfirm
调用中将回调作为参数,然后将其传递给该承诺的then
,并且每当您填写确认时间时,只需解决该承诺