【问题标题】:Can i import single file component using Vue and Vue Router CDN?我可以使用 Vue 和 Vue Router CDN 导入单个文件组件吗?
【发布时间】:2019-04-16 01:57:32
【问题描述】:

我目前正在使用 Vue 和 Vue Router CDN。我想使用 Vue 路由器将单个文件组件 (user.html) 导入我的 index.html。但是当我点击“转到用户”时,数据没有显示。我阅读了一些关于 Vue 路由器的指南,但他们使用 NPM 或 CIL 而不是 Vue CDN。 索引.html

<div id="app">
  <h1>Hello App!</h1>
  <p>
    <!-- use router-link component for navigation. -->
    <!-- specify the link by passing the `to` prop. -->
    <!-- `<router-link>` will be rendered as an `<a>` tag by default -->
    <router-link to="/foo">Go to Foo</router-link>
    <router-link to="/bar">Go to Bar</router-link>
    <router-link to='/User.html'>Go to User</router-link>
  </p>
  <!-- route outlet -->
  <!-- component matched by the route will render here -->
  <router-view></router-view>
</div>
<script>
const Foo = { template: '<div>foo</div>' }
const Bar = { template: '<div>bar</div>' }
const User = { template: '#test'}
const routes = [
{ path: '/foo', component: Foo },
{ path: '/bar', component: Bar },
{
  path:'/User.html', component: User
}
]

const router = new VueRouter({
routes 
})
const app = new Vue({
router
}).$mount('#app')
</script>

用户.html

<template id = "test">
fsjdfjdfldskjflkd
</template>

【问题讨论】:

    标签: vue.js vuejs2 vue-component vue-router


    【解决方案1】:

    我认为这是一个误会。据我所知,您正在尝试以加载.vue 文件的方式加载User.html,但这不起作用,除非您使用Webpack 来构建您的项目,因为.vue 文件类型是vue-loader 项目负责解析的东西。

    Vue Router CDN 意味着您不是使用 Webpack 构建的,因此像您正在做的那样加载组件是不可能的。您可以将 Vue Router 配置为提供 User.html 文件,但该文件不能是模板组件,因为在 CDN 模式下,Vue Router 不知道您的服务器上有哪些文件,也不能简单地检索它们。

    所以你需要做以下三个选项之一:

    选项 1:开始为您的项目使用 Webpack

    我建议你这样做。您会发现您的项目会表现得更好,并且使用它更容易开发。

    选项 2:为 CDN 使用正确的模板语法

    例如:

    var mytemplate = `<div>
    <h1>This is my template</h1>
    </div>`
    
    Vue.component('mycomp1', {
        template: mytemplate
    });
    
    Vue.component('mycomp2', {
        template: `
            <div>
                Hello, {{ name }}!
            </div>
        `,
        props: ['name'],
    });
    

    当您不使用 Webpack 构建时,您无法将其他文件加载为模板。 Webpack 将它们放入您的单页应用程序中,Vue Router 不知道 User.html 里面是什么,Vue 也不能将其用作模板。可以告诉 Vue Router 重定向到功能齐全的 User.html 网站页面,但不能仅将其用作模板。

    选项 3:使用 Ajax 请求获取模板文件

    我强烈建议您不要这样做,但为了完整起见,如果您使用 Ajax 请求获取 User.html 文件的内容并从中创建组件,则可以使用 CDN 版本。

    我真的,真的建议你停止使用 CDN 版本,转而使用基于 Webpack 的解决方案,向黑暗面屈服!或者让它更简单,改用 Nuxt.js,因为它对初学者来说更容易使用。

    【讨论】:

    • 为什么不推荐选项 3?我认为选项 3 结合了单文件组件和易于 CDN 部署的优点。
    • 如果它在运行时从 CDN 获取,那么它就不是真正的单页网站。每个用户在加载站点时都会无缘无故地发出网络请求,并且由于您必须交付运行版本的 vue,因此您会增加网站的大小和加载时间。此外,与使用 webpack 将内容直接烘焙到您的网站相比,CDN 并不容易。 CDN 是过时的技术,不知道为什么仍在使用。
    • CDN 对于您只能在外部主机上处理一个您几乎无法控制的单个 HTML 文件的情况仍然非常有用。您不必弄清楚在哪里托管您的 webpack 文件或尝试使其 100% 内联,更不用说担心在哪里运行您的管道来部署已编译的版本。它一点也不陈旧,它只是满足特定需求。还有单页应用!= 单一资源来源
    • 1.外部主机上的单个html文件?基本上 99% 的情况都是使用 Vue,这绝不会改变您是否可以使用 Webpack,因为您仍然可以控制页面的源代码。 2. Webpack 文件存放在哪里?你到底是什么意思?为您的网站选择什么主机?你知道什么是 webpack 吗? 3. 单页应用可以是单一资源来源,完全取决于你如何设置它。至少,您倾向于只从您自己的站点获取多个资产,而不是跨站点资产并依赖托管您的内容的其他人,从而使您成为掌控者。
    猜你喜欢
    • 2021-03-25
    • 2021-06-08
    • 2019-09-22
    • 1970-01-01
    • 1970-01-01
    • 2020-08-03
    • 2020-06-21
    • 2019-02-17
    • 2018-07-03
    相关资源
    最近更新 更多