Mở tab mới khi nhấp vào nút trong AngularJS


76
<button type="button" class="btn btn-primary" ng-click="openTab()">new tab</button>

openTab = function () {
  $http.post('www.google.com');
}

Những gì tôi muốn là đăng một yêu cầu và mở html phản hồi trong một tab mới khi bạn nhấp vào nút "openTab". Không có phương pháp để làm điều này với $http. Tôi nghĩ điều này có thể đơn giản, nhưng tôi không thể tìm ra cách.


Bạn có thể chấp nhận giải pháp? Phiếu bầu của tôi dành cho @Aaron một :)
Sampath

Câu trả lời:


173

Bạn có thể thực hiện tất cả điều này trong bộ điều khiển của mình bằng cách sử dụng dịch vụ $ window tại đây . $ window là một trình bao bọc xung quanh cửa sổ đối tượng trình duyệt chung.

Để thực hiện công việc này, hãy đưa $ window vào bộ điều khiển của bạn như sau

.controller('exampleCtrl', ['$scope', '$window',
    function($scope, $window) {
        $scope.redirectToGoogle = function(){
            $window.open('https://www.google.com', '_blank');
        };
    }
]);

điều này hoạt động tốt khi chuyển hướng đến các tuyến đường động


2
Chrome khóa cửa sổ bật lên này .. Làm cách nào để nhận dạng cửa sổ bật lên đã bị khóa và thông báo cho người dùng về nó?
vp_arth

làm việc tốt trong chrome và firefox nhưng trong IE dùng get loggedout và chuyển hướng đến đăng nhập page.is có một số công việc xung quanh để giải quyết vấn đề cho IE
Nitu Bansal

21

Tôi đã giải quyết câu hỏi này theo cách này.

<a class="btn btn-primary" target="_blank" ng-href="{{url}}" ng-mousedown="openTab()">newTab</a>

$scope.openTab = function() {
    $scope.url = 'www.google.com';
}

Thủ thuật này rất tuyệt vời, đặc biệt là đối với những người đang giải quyết vấn đề bảo mật của Chrome có thể khóa trang tab mới được mở bằng tập lệnh theo cách thủ công.
Telvin Nguyen 28/11/18

7

Cách HTML phù hợp: chỉ cần bao quanh nút của bạn bằng phần tử neo và thêm thuộc tính target = "_ blank" . Nó đơn giản như vậy:

<a ng-href="{{yourDynamicURL}}" target="_blank">
    <h1>Open me in new Tab</h1>
</a>

nơi bạn có thể đặt trong bộ điều khiển:

$scope.yourDynamicURL = 'https://stackoverflow.com';

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.