নতুন ট্যাবে ভিউ-রাউটার কোনও লিঙ্ক খুলতে পারে?


97

আমার একটি সংক্ষিপ্ত পৃষ্ঠা এবং একটি বিশদ উপ পৃষ্ঠা আছে। সমস্ত রুট vue-routerএইভাবে প্রোগ্রাম্যাটিক নেভিগেশন ব্যবহার করে (v 0.7.x) প্রয়োগ করা হয় :

this.$router.go({ path: "/link/to/page" })

যাইহোক, যখন উপপাতায় সারসংক্ষেপ পাতা থেকে আমি রুট, আমি যোগ করে ঠিক যেমন এক would একটি নতুন ট্যাবে উপপৃষ্ঠা খুলতে হবে _target="blank"একটি থেকে <a>ট্যাগ।

এই কাজ করতে একটি উপায় আছে কি?


4
আমি না না Vue রাউটার দিয়ে সম্ভব, আপনি নিষ্কর্ষ এবং আপনার URL গড়ে তুলতে এবং তারপর (URL, '_blank') window.open ব্যবহার হতে পারে মনে
দীপক

4
হ্যাঁ, তারা আনুষ্ঠানিকভাবে বলেছে এটি অসম্ভব। ধন্যবাদ.
তাং জিওং

নীচে একটি উত্তর রয়েছে যা কাজ করে, আপনার প্রশ্নের প্রতিক্রিয়া হিসাবে আপনার তা গ্রহণ করা উচিত, আপনি কি ভাবেন না?
আন্দ্রেস ফিলিপ

উত্তর:


169

আমি মনে করি আপনি এই জাতীয় কিছু করতে পারেন:

let routeData = this.$router.resolve({name: 'routeName', query: {data: "someData"}});
window.open(routeData.href, '_blank');

এটা আমার জন্য কাজ করে। ধন্যবাদ


4
এটি আমার কাছে সেরা উপায় বলে মনে হচ্ছে। আপনি এখনও কিছু হ্যাকি স্ট্রিং একসাথে ম্যাশ না করে url তৈরি করতে $ রাউটার ব্যবহার করেন, তারপরে নতুন ট্যাবটি খুলতে উইন্ডোটি ব্যবহার করুন। +1
জন স্মিথ

4
এটি সর্বাধিক সম্পূর্ণ সমাধান, যদি আপনি যে পথে যেভাবে ইউআরএলটি প্রবেশের চেষ্টা করছেন সেটির URL টি আপনাকে পরীক্ষা করে রাখে। সুন্দর!
নিতজানকিন

4
দুর্ভাগ্যক্রমে এই পদ্ধতিটি কোনও ডিফল্ট ব্রাউজারের পপআপ ব্লকার দ্বারা ব্লক হয়ে যায়
ফটোনিক

এটি সেরা উত্তর আইএমও
কালেজি

4
@Rafel, আমি আপনাকে জিজ্ঞাসা থাকতে পারে একটি Vue.JS কটাক্ষপাত Anthone গোর দ্বারা বইয়ের GitHub 'ফুল স্ট্যাক Vue.js 2 এবং Laravel 5' এ সোর্স কোড এখানে সংক্রান্ত কোনো প্রশ্ন stackoverflow.com/questions/59245577 /… ? বিশেষত এডিটি: ওপির বিভাগটি একবার দেখুন?
ইসতিয়াক আহমেদ

123

দেখে মনে হচ্ছে এটি এখন আরও নতুন সংস্করণগুলিতে সম্ভব হয়েছে (ভিউ রাউটার 3.0.0):

<router-link :to="{ name: 'fooRoute'}" target="_blank">
  Link Text
</router-link>

আপনি কি পরামিতি পাস করতে পারে বলে মনে হচ্ছে না? লিঙ্কটি নিজেই খুলুন। সঠিক?
Gotts

@ আপনি প্যারাম এবং কোয়েরিপ্যারামগুলিও পাস করতে পারবেন G এটি করার জন্য কোডটি নীচে দেওয়া হবে <রাউটার-লিঙ্ক: থেকে = "{নাম: 'fooRoute', প্যারাম: {পরম_ওয়ার: 'আইডি_প্যারামিটার'}, ক্যোয়ারী: {ক্যুরি_ওয়ার: 'ক্যোয়ারী_প্রেমস'}}" লক্ষ্য = "_ ফাঁকা" > লিঙ্ক পাঠ্য </
translation

মনে রাখবেন এটি <router -link> এর জন্য, এটি প্রোগ্রামক্রমে কাজ করে না this.$router.push()
jplindstrom

22

তাদের জন্য যারা উত্তরটি অবাক করছেন তারা হবেন না। গিতুব সম্পর্কিত সমস্যা দেখুন ।

প্রশ্ন: নতুন ট্যাব প্রোগাম্যাটিক্যালিতে লিংকটি খুলতে পারে

উত্তর: না, একটি সাধারণ লিঙ্ক ব্যবহার করুন।


12
আপনাকে ধন্যবাদ, আসলে সমস্যাটি আমার দ্বারা খোলা হয়েছে।
তাং জিওনগ

4
এখন সম্ভব যোগ করার জন্য target="_blank"একটি থেকে <router-link>v3 এর ট্যাগে stackoverflow.com/a/49654382/2678454
thanksd

পুরো ইউআরএল তৈরির পরিবর্তে এবং উইন্ডো ওপেন ব্যবহার করার পরিবর্তে এটি খুব সহায়ক বলে খুঁজে
সাইনাথ এসআর

14

যদি আপনি আপনার রুটকে প্রশ্নে জিজ্ঞাসিত ব্যক্তির মতো সংজ্ঞায়িত করেন (পথ: '/ লিঙ্ক / টু / পৃষ্ঠা'):

import Vue from 'vue'
import Router from 'vue-router'
import MyComponent from '@/components/MyComponent.vue';

Vue.use(Router)

export default new Router({
  routes: [
    {
      path: '/link/to/page',
      component: MyComponent
    }
  ]
})

আপনি আপনার সারাংশ পৃষ্ঠায় ইউআরএল সমাধান করতে এবং নীচের মত আপনার সাব পৃষ্ঠা খুলতে পারেন:

<script>
export default {
  methods: {
    popup() {
      let route = this.$router.resolve({path: '/link/to/page'});
      // let route = this.$router.resolve('/link/to/page'); // This also works.
      window.open(route.href, '_blank');
    }
  }
};
</script>

অবশ্যই আপনি যদি নিজের রুটটিকে একটি নাম দিয়ে থাকেন তবে আপনি নামটি দিয়ে URL টি সমাধান করতে পারেন:

routes: [
  {
    path: '/link/to/page',
    component: MyComponent,
    name: 'subPage'
  }
]

...

let route = this.$router.resolve({name: 'subPage'});

তথ্যসূত্র:


11

আপনার প্রকল্পের কোথাও, সাধারণত মেইন.জেস বা রাউটার.জেএস

import Router from 'vue-router'

Router.prototype.open = function (routeObject) {
  const {href} = this.resolve(routeObject)
  window.open(href, '_blank')
}

আপনার উপাদান:

<div @click="$router.open({name: 'User', params: {ID: 123}})">Open in new tab</div>

ডাউন-ভোটিং নয়, তবে ভ্যু 3 এর পক্ষে এটি দুর্দান্ত? । কারণ কনসোল / এই লগ-ইন আমার জন্য undefined router.open আয় $
Dexygen

প্রোটোটাইপকে রূপান্তরিত করায় এই পদ্ধতিকে নিরুৎসাহিত করা হচ্ছে। আপনি এটি লগ করতে পারবেন না, কারণ এটি অনুমানের অংশ নয়।
adi518


4

আপনার রাউটিং ফাইলে কেবল এই কোডটি লিখুন:

{
  name: 'Google',
  path: '/google',
  beforeEnter() {                    
                window.open("http://www.google.com", 
                '_blank');
            }
}

4

এটি আমার জন্য কাজ করেছে-

let routeData = this.$router.resolve(
{
  path: '/resources/c-m-communities', 
  query: {'dataParameter': 'parameterValue'}
});
window.open(routeData.href, '_blank');

আমি @ রাফায়েল_আ্যান্ডারস_স্পেসিডেস_বেস্টেরিওর উত্তরটি পরিবর্তন করেছি


3

যদি আপনি চান আপেক্ষিক পাথ শুধুমাত্র আগ্রহী: /dashboard, /aboutইত্যাদি অন্যান্য উত্তর দেখুন।

আপনি যদি https://www.google.comকোনও নতুন ট্যাবের মতো: একটি নিখুঁত পথ খুলতে চান তবে আপনাকে জানতে হবে ভ্যু রাউটারগুলি হ্যান্ডেল করার উদ্দেশ্যে নয়।

তবে, তারা এটিকে একটি বৈশিষ্ট্য-অনুরোধ হিসাবে বিবেচনা করবে বলে মনে হয়। # 1280 । তবে তারা তা না করা পর্যন্ত



ভ্যু-রাউটারের সাহায্যে বাহ্যিক লিঙ্কগুলি পরিচালনা করতে আপনি এখানে একটি ছোট কৌশলটি করতে পারেন।

  • রাউটার কনফিগারেশনে যান (সম্ভবত router.js) এবং এই কোডটি যুক্ত করুন:
/* Vue Router is not meant to handle absolute urls. */
/* So whenever we want to deal with those, we can use this.$router.absUrl(url) */
Router.prototype.absUrl = function(url, newTab = true) {
  const link = document.createElement('a')
  link.href = url
  link.target = newTab ? '_blank' : ''
  if (newTab) link.rel = 'noopener noreferrer' // IMPORTANT to add this
  link.click()
}

এখন, যখনই আমরা নিখুঁত ইউআরএলগুলি নিয়ে ডিল করি তখন আমাদের একটি সমাধান হয়। উদাহরণস্বরূপ একটি নতুন ট্যাবে গুগল খুলতে

this.$router.absUrl('https://www.google.com)

মনে রাখবেন যে যখনই আমরা একটি নতুন ট্যাবে অন্য পৃষ্ঠা খুলি তখন আমাদের ব্যবহার করা উচিত noopener noreferrer

এখানে আরও পড়ুন

বা এখানে


মোবাইল ফোন বাদে প্রায় সমস্ত ডিভাইসে আমার পক্ষে ভাল কাজ করে, যেখানে নতুন উইন্ডোটি খোলে না!
javascript110899

0

এটি আমার পক্ষে কাজ করে:

এইচটিএমএল টেমপ্লেটে: <a target="_blank" :href="url" @click.stop>your_name</a>

মাউন্ট করা (): this.url = `${window.location.origin}/your_page_name`;


0

অ্যাঙ্কর ট্যাগ ব্যবহার করে এটি করার সহজ উপায় হ'ল:

<a :href="$router.resolve({name: 'posts.show', params: {post: post.id}}).href" target="_blank">
    Open Post in new tab
</a>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.