检查angularjs中的条件

时间:2017-07-14 05:16:19

标签: javascript angularjs if-statement conditional-statements

基本上我有一个工厂

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){

}

这不起作用。如何检查以角度执行的功能?

6 个答案:

答案 0 :(得分:5)

EMIT& BROADCAST

如果您检查onConfirm事件,它将控制onConfirm函数在gService.confirmDialog对象上定义语句wroten。这不是异步和承诺的工作。

if(gService.confirmDialog.onConfirm){

}

您需要先 通知您的听众 。之后 听取该事件 来完成您的工作。

您可以broadcastemit等待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,并且每当您填写确认时间时,只需解决该承诺