javascript - AngularJS 异步将 href 分配给链接

标签 javascript angularjs asynchronous

我需要异步更新链接的 href。假设我有这个 html:

<a ng-href="{{url}}" ng-click="resolveUrl()" target="_blank">click me</a>

还有这个 Angular Controller :

app.controller('MainCtrl', function($scope, $q) {
  $scope.url = '#';

  $scope.resolveUrl = function() {
    async().then(function(resolvedUrl){
      $scope.url = resolvedUrl;
    });
  }

  function async() {
    var deffered = $q.defer();

    setTimeout(function() {
      deffered.resolve('http://www.google.com');
    }, 1000)

    return deffered.promise;
  }
});

即使是第一次,我也需要链接才能转到 google.com。如何同步异步调用或如何分配 url 以便异步函数解析?

Code in plunker

编辑:

正如@Konstantin Krass 指出的那样,我可以使用 window.open()。但我不能异步使用它,因为浏览器会弹出阻止新窗口。所以我尝试打开另一个点击窗口(未被阻止),然后在 promise 得到解决后,我将打开的窗口的 url 更新为 google.com。编辑过的 plunker 是 here .不幸的是,这在 iPad 上不起作用。在 iPad 上,页面 url 不会更新,因为在 iPad 上,选项卡无法相互通信。 有什么想法吗?

最佳答案

如果你想计算url并在点击后重定向到url,你可以在收到url后使用原生的location.href

app.controller('MainCtrl', function($scope, $q) {     

  $scope.resolveUrl = function() {
    async().then(function(resolvedUrl){
      location.href= resolvedUrl; //this would open the url in the current page.
      // if you want to offer a download or move 
      // into new browser tab you can go like this: 
      // window.open(resolvedUrl);  
    });
  }

  function async() {
    var deffered = $q.defer();

    setTimeout(function() {
      deffered.resolve('http://www.google.com');
    }, 1000)

    return deffered.promise;
  }
});

并从 html 中删除 {{url}}

<a ng-click="resolveUrl()">click me</a>

关于javascript - AngularJS 异步将 href 分配给链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24449469/

相关文章:

c++ - 什么 shared_ptr 策略用于异步方案?

javascript - 如何在异步调用中跟踪同步变量

javascript - 如何为暗/亮模式切换保存 cookie?

javascript - 有没有办法使用正则表达式来执行相同的图像交换功能,而不管扩展名如何?

javascript - 在多个浏览器上测试 OpenTok flash,一个浏览器可以正常发布视频,但另一个浏览器显示黑屏

javascript - 错误: Cannot read property of undefined

javascript - 离开路线时 Angular 解除绑定(bind)事件

javascript - 使用 Angular JS,在路由更改时关闭 Web 套接字连接的正确方法是什么?

javascript - 尝试从 JSON 文件返回 URL

javascript - 从 Angular 2 客户端到 Node.js 服务器的 HTTP POST 请求