在angularjs中等待另一个组件的响应

Wait for the response from another component in angular js

我创建了一个名为 popupmessage 的组件来显示带有 "ok" 和 "cancel" 按钮的自定义消息。这是我从另一个组件调用的组件 "a" 使用 $compile 如下所示。

a.js 具有以下调用弹出消息框的代码:

var dialogBox = $compile('<pop-up-message id="messagebox" message="' + response.data + '" okbutton="' + "true" + '"cancelbutton="' + "false"'"></pop-up-message>')($scope);
$('.data-table').append(dialogBox);

在此之后,我想在单击弹出消息组件中的“确定”按钮时重新加载组件 "a"。我该怎么做呢? 组件 "a" 的重新加载可以通过在上述行之后添加 window.location.reload() 来实现。 但它不会等到我在弹出消息组件中单击 "OK"。

我想在弹出消息组件中单击按钮 "ok" 后在 "a" 组件中调用重新加载。 如何实现?

我不确定 pop-up-message 指令是什么样子,但我猜它与下面的代码有点相似。

无论如何,指令可以通过它的属性接收调用它的人的数据,但你已经知道这一点,因为你将 message 传递给指令。

指令也可以接收函数。所以你在控制器/组件中声明函数,通过属性传递它,然后你可以在指令中调用它。

即使您的控制器/指令与示例 [1] 看起来不一样,您也可能知道如何实现它。

angular
  .module('app', [])
  .controller('ctrl', function($scope, $compile) {
    $scope.show = function() {
      // fake response
      const response = {
        data: 'my data'
      }
      $scope.modalCallback = function() {
        console.log('callback fired');
        // window.location.reload() <-- now you can call it
      }

      var dialogBox = $compile('<pop-up-message id="messagebox" message="' + response.data + '" okbutton="true" cancelbutton="false" callback="modalCallback()"></pop-up-message>')($scope);
$('.data-table').append(dialogBox);
    }
  })
  .directive('popUpMessage', function() {
    return {
      scope: {
        message: '@',
        callback: '&'
      },
      template: `
        <div>
          {{message}}
          <button ng-click="callback()">Ok</button>
        </div>
      `
    }
  });
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.7.5/angular.min.js"></script>

<div ng-app="app" ng-controller="ctrl">
  <button ng-click="show()">show modal</button>
</div>

<div class="data-table"></div>


[1] 在示例中我使用了 isolated scope。如果你的指令没有使用它,你应该在你传递指令的 scope 上声明 callback 函数,它应该工作相同。