如何在不更改 window 位置的情况下在 AngularJS 控制器中触发 mailto

How to trigger mailto in AngularJS controller without changing window location

我有一个 angular 控制器,它在单击邮件图标时触发 "mailto" link

angular
  .module('app')
  .component('header', {
    template: '<a href="" ng-click="headerCtrl.mailTo()"><i class="fa fa-envelope" aria-hidden="true"></i></a>',
    controller: HeaderController,
    controllerAs: 'headerCtrl'
  });

function HeaderController() {
  var vm = this;

  vm.sendMail = sendMail;

  function sendMail(response) {
    var email = 'test@mail.com';
    var subject = 'email%20subject';
    var body = 'email%20body';
    vm.mailToUri = 'mailto:' + email + '?subject=' + subject + '&body=' + body;
    $window.location = vm.mailToUri;
  }
}

不幸的是,这 运行 在与浏览器关闭时调用注销 url 的指令相同的应用程序中

angular
  .module('app')
  .directive('onCloseLogout', onCloseLogout);

function onCloseLogout($http, $window) {
  return {
    restrict: 'AE',
    link: function () {
      $window.onbeforeunload = function () {
        $http.get('/logout');
      };
    }
  };
}

因此,当单击电子邮件 link 时,会触发 onCloseLogout 指令,并且用户会注销。

是否有其他方法可以在 angular 中打开电子邮件,或者在浏览器关闭时向注销 URL 发送获取请求?

原来我过度设计了解决方案。我将 mailToUri 作为 ng-href 属性添加到锚标记,现在一切正常

angular
  .module('app')
  .component('header', {
    template: '<a ng-href="{{headerCtrl.mailToUri}}"><i class="fa fa-envelope" aria-hidden="true"></i></a>',
    controller: HeaderController,
    controllerAs: 'headerCtrl'
  });

function HeaderController() {
  var vm = this;

  var email = 'test@mail.com';
  var subject = 'email%20subject';
  var body = 'email%20body';
  vm.mailToUri = 'mailto:' + email + '?subject=' + subject + '&body=' + body;
}