Angularjs $ state mở liên kết trong tab mới


81

Tôi đang cố gắng triển khai chức năng "mở liên kết trong tab mới" bằng cách sử dụng hàm $ state.go. Sẽ thật tuyệt vời nếu có những thứ như:

$state.go('routeHere', {
    parameter1 : "parameter"
    }, {
    reload : true,
    newtab : true // or smth like target : "_blank"
});

Có cách nào để làm điều đó bằng cách sử dụng AngularJS không?


Chỉnh sửa trong câu hỏi nói rằng bạn đã giải quyết nó bằng đoạn mã sau có vẻ thừa. I E. nó ngụ ý rằng bạn đã chọn nó làm câu trả lời được chấp nhận của bạn.
Adam Zerner

Đã sửa, đã xóa bản chỉnh sửa.
Alex Arvanitidis

Bạn có thể tìm thấy câu trả lời ở đây Angularjs $ trạng thái mở liên kết trong tab mới
Dalorzo

Câu trả lời:


153

Cập nhật: OK, tôi vừa giải quyết nó bằng cách sử dụng mã sau:

var url = $state.href('myroute', {parameter: "parameter"});
window.open(url,'_blank');

18
Đó không phải là $ window để thực hành tốt nhất?
tsuz

3
Bạn có chắc chắn tham số có thể được chuyển sang cửa sổ mới không?
hjl

Có @elaijuh họ sẽ được thông qua
Manuel Di Iorio

@alex tôi muốn nhắm mục tiêu một cửa sổ đã xác định, vì vậy tôi đã thử window.open (url, 'myWindow'); nhưng nó không hoạt động. Bất kỳ giúp đỡ?
mhd

1
Lưu ý rằng nếu bạn mở một liên kết từ javascript theo cách này và url cơ sở thay đổi, rất có thể trình duyệt sẽ chặn nó nói rằng trang web đã cố gắng mở một cửa sổ bật lên, nhưng nếu người dùng chấp nhận hoặc cho phép trang web của bạn làm như vậy, thì nó sẽ công việc.
GabLeRoux

55

Tôi vừa thử cái này - rõ ràng là đang thêm target="_blank"các tác phẩm với ui-sref:

<a ui-sref="routeHere" target="_blank">A Link</a>

Giải quyết rắc rối khi thêm mã vào bộ điều khiển của bạn và cung cấp cho bạn URL khi di chuột như với bất kỳ liên kết thông thường nào. Win-win!


3
điều này chỉ hoạt động trên <a>. "target" rõ ràng không hoạt động trên các phần tử khác. tức là <button ui-sref = "routeHere" target = "_ blank"> A Link </button>
Luis

2
@Luis Buttons không có thuộc tính Target nên có, nó sẽ không hoạt động
gerl

1
@Luis Có thể bạn có thể sử dụng các lớp liên quan đến nút và đóng vai trò như nút cho thẻ neo để làm cho nó giống như một nút. Ví dụ:<a ui-sref="routeHere" target="_blank" class="btn btn-primary" role="button">A Link</a>
Safwan

7

Tôi đã gặp sự cố tương tự, hãy thử điều này nếu không có gì từ các câu trả lời trước đó phù hợp với bạn.

var url = '#' + $state.href('preview');
window.open(url,'_blank');

Vì vậy, về cơ bản khi làm việc trong localhost, mà không cần bổ sung, '#'nó chỉ chuyển hướng đến

localhost / xem trước

, thay vì

localhost / Project_Name / # / preview

Tôi không nói ở đây về việc chuyển dữ liệu, chỉ để mở $ state trong tab mới.


6

Nó có thể không hoạt động trên localhost trong trường hợp ứng dụng của bạn nằm trong một thư mục con. Trên thực tế, tôi đã có cùng một vấn đề.

Tôi đã thử trực tuyến và nó hoạt động như mong đợi bằng cách sử dụng:

<a ui-sref="routeHere" target="_blank">Link</a>

4

Câu trả lời tốt nhất mà tôi tìm thấy, là mở rộng ui.router, vì tính năng này, không tồn tại được tích hợp sẵn. Bạn có thể tìm thấy chi tiết đầy đủ ở đây:

Mở rộng $ state.go của Angular 1.x ui-router

Tuy nhiên, đây là lời giải thích ngắn gọn của tôi về những gì cần phải làm, thêm tệp này vào tệp app.js hoặc app init dạng góc:

angular.module("AppName").config(['$provide', function ($provide) {
    $provide.decorator('$state', ['$delegate', '$window',
        function ($delegate, $window) {
            var extended = {
                goNewTab: function (stateName, params) {
                    $window.open(
                        $delegate.href(stateName, params, { absolute: true }), '_blank');
                }
            };
            angular.extend($delegate, extended);
            return $delegate;
        }]);
}]);

Trong mã của bạn

Bạn sẽ có thể làm:

$state.goNewTab('routeHere', { parameter1 : "parameter"});

3
ui-sref="routeHere" href=""target="_blank"

mã này đã giải quyết vấn đề của tôi.

sử dụng điều này trong một thẻ liên kết.


2

Thử đi!

<a ui-sref="routeHere({parameter: vm.parameter})" target="_blank"></a>


Điều này không liên quan, tôi không nói rằng tôi cần thêm thông số vào tuyến đường mà tôi gọi, tôi nói tôi muốn mở tuyến này trong một tab mới.
Alex Arvanitidis

Điều này có thể phù hợp với nhiều người. Tôi vừa mới sử dụng cái này. Một điều cần đề cập ở đây là tên tham số phải nằm trong dấu nháy đơn. <a ui-sref="routeHere({'parameter': vm.parameter})" target="_blank"> </a>
Sudheer Muhammed
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.