【问题标题】:using $emit to pass a function from child to parent in angularJS使用 $emit 在 angularJS 中将函数从子级传递给父级
【发布时间】:2017-12-04 17:58:59
【问题描述】:

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

这是我的文件结构

-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 从计算发送到提交,但这样做的运气并不好。

例如:

$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;
};

但它并没有真正按预期工作。

【问题讨论】:

标签: javascript angularjs function emit


【解决方案1】:

假设控制器以彼此为父子的方式使用,您提供的代码有两个问题:

  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()
    });
    

【讨论】:

    【解决方案2】:

    从孩子'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;
    };
    

    【讨论】:

      猜你喜欢
      • 2020-06-21
      • 2019-08-28
      • 1970-01-01
      • 2019-12-04
      • 2020-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-09
      相关资源
      最近更新 更多