使用$ emit在angularJS中将函数从child传递给parent

时间:2017-12-04 17:58:59

标签: javascript angularjs function emit

我想将一个函数的结果发送给一个孩子的父控制器。

这是我的文件结构

-submission.controller.js
--calculate.controller.js

在calculate.controller.js中,我有一个看起来像的函数:

function validForm() {
  var checkForm = false;
  if(files === true) {
    checkForm = true;
  }
  return checkForm;
}

我希望将此函数的结果发送给父(submission.controller.js)并将其用作函数中的参数。

showValidZip() {
  if (validForm() === true) {
    return false;
  }
  return true;
};

到目前为止,我已经尝试使用$ emit和$ on将validForm从calculate发送到提交但是没有运气这么做。

例如:

$scope.$emit('validForm', function () {
  var checkForm = false;
  if(files === true) {
    checkForm = true;
  }
  return checkForm;
});

$scope.showValidZip = function () {
  if ($scope.$on('validForm') === true) {
    return false;
  }
  return true;
};

但它并没有按预期工作。

2 个答案:

答案 0 :(得分:0)

假设控制器的使用方式使得它们是彼此的父子关系,那么您提供的代码就存在两个问题:

  1. $scope.$emit期望事件名称旁边的参数,所以如果你想传递一个函数的结果,你可以有一个单独的函数,然后从那里调用它,如$scope.$emit('validForm', myFunctionCall())
  2. 此外,您不能使用$scope.$on,因为它不会返回任何内容。如果要访问从$emit发送的值,可以在侦听器函数(第二个参数)中执行此操作,例如:

    $scope.$on('validForm', function(event, argument1) {
      // argument1 is the same as return value of myFunctionCall()
    });
    

答案 1 :(得分:0)

'Emit'来自孩子。

$scope.$emit('validForm', function () {
var checkForm = false;
if(files === true) {
checkForm = true;
}
return checkForm;
});

现在收到。

$scope.showValidZip = function () {
$scope.$on('validForm'), function(event, data) {
  if(data === true)
  return false;
});
return true;
};