html中创建并调用vue组件的几种方法汇总


Posted in Javascript onNovember 17, 2020

作者:Echoyya
出处:https://www.cnblogs.com/echoyya/

最近在写项目的时候,总是遇到在html中使用vue.js的情况,且页面逻辑较多,之前的项目经验都是使用脚手架等已有的项目架构,使用.vue文件完成组价注册,及组件之间的调用,还没有过在html中创建组件的经验,所以借此机会学习总结一下。

方法一:Vue.extend( options )

  • 用法:使用基础 Vue 构造器,创建一个“子类”。参数是一个包含组件选项的对象。data 选项是特例,需要注意 - 在 Vue.extend() 中它必须是函数
  • extend 创建的是 Vue 构造器,而不是我们平时常写的组件实例,所以不可以通过 new Vue({ components: testExtend }) 来直接使用,需要通过 new Profile().$mount('selector选择器') 来挂载到指定的元素上。
  • Vue.extend + vm.$mount 组合
// 借用官网的例子,小小改动了一下
// 在父组件中,创建一个子组件,并调用
<div id='app'>
  <button>{{message}}</button>
  <div id="mount-point"></div>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script type="text/javascript">
 var vm = new Vue({
  el:"#app",
  data:{
   message:'父组件'
  },
 });
 // 创建构造器
 var Profile = Vue.extend({
  template: '<p>{{firstName}} {{lastName}} {{alias}}</p>',
  data: function () {
   return {
    firstName: 'N',
    lastName: 'H',
    alias: 'Y'
   }
  }
 })
 // 创建 Profile 实例,并挂载到一个元素上。
 new Profile().$mount('#mount-point')
 </script>

方法二:Vue.component( id, [definition] ) + Vue.extend( options )

用法:Vue.component()注册或获取全局组件。注册还会自动使用给定的 id 设置组件的名称

<div id="app">
 <!-- 如果要使用组件,直接把组件的名称以 HTML 标签的形式,引入到页面中-->
 <todo :todo-data="todoList"></todo>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script type="text/javascript">
// 构建一个子组件
var todoItem = Vue.extend({
 template: ` <li> {{ text }} </li> `,
 props: ['text']
})

// 构建一个父组件
var todoWarp = Vue.extend({
 template: `
  <ul>
   <todo-item v-for="(item, index) in todoData" v-text="item.text"></todo-item>
  </ul>
  `,
 props: ['todoData'],
 // 局部注册子组件
 components: {
  //使用 components 定义组件时,若组件名称使用驼峰命名,则在引用组件时,需要把大写改为小写,并且用'-'将单词连接
  todoItem: todoItem
 }
})
// 注册到全局
Vue.component('todo', todoWarp) // 等同于下面这种写法
Vue.component('todo',Vue.extend({
 template : 'xxx',
 props:[xxx],
 components:'xxx'
}))

new Vue({
 el: '#app',
 data: {
  todoList: [
   { id: 0, text: '工作' },
   { id: 1, text: '学习' },
   { id: 2, text: '休息' }
  ]
 }
})
</script>

方法三:直接使用Vue.component()

<div id="app">
 <mycom></mycom>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script type="text/javascript">
 Vue.component('mycom',{
  template : '<h3>这是使用 Vue.component 创建的组件</h3>'
 })
 new Vue({
  el: '#app'
 })
</script>

但是这样写会有一个问题:在h3标签后出现另一个标签,就会出问题,

Vue.component('mycom',{
 template : '<h3>这是使用 Vue.component 创建的组件</h3><h3>这是使用 Vue.component 创建的组件</h3>'
})

html中创建并调用vue组件的几种方法汇总

  • 原因:组件template属性指向的模板内容,必须有且只能有唯一的一个根元素
  • 解决方法: 用唯一的div作为父元素,将多个子元素包裹

方法四:使用Vue.component()

在被控制的 #app 外面使用 template 元素,定义组建的HTML模板结构

<div id="app">
 <mycom></mycom>
</div>
<template id="tem1">
 <h1>这是 template 元素</h1>
</template>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script type="text/javascript">
 Vue.component('mycom', {
  template: '#tem1'
 });
 new Vue({
  el: '#app'
 })
</script>

方法五:使用Vue.component() + is

<div id="app">
 <ul>
  <li is="todo-item" v-for="(todo,index) in todos " :title="todo" :key="index" @remove="removeTodo(index)"></li>
 </ul>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script type="text/javascript">
 Vue.component('todo-item', {
  template: `
   <li>
    {{title}}
    <button @click="$emit('remove')">remove</button>
   </li>
  `,
  props: ['title']
 })
 new Vue({
  el: "#app",
  data: {
   todos: ["eating", "swimming", "reading"]
  },
  methods: {
   removeTodo: function (index) {
    this.todos.splice(index, 1)
   }
  }
 })

补充说明一下is属性:

有些 HTML 元素,诸如 ul、ol、table 和 select,对于可以出现在其内部元素是有严格限制的。而有些元素,诸如 li、tr 和 option,只能出现在特定的元素内部。这会导致我们使用这些有约束条件的元素时遇到一些问题。例如

<table>
 <blog-post-row></blog-post-row>
</table>

这个自定义组件 会被作为无效的内容提升到外部,并导致最终渲染结果出错。幸好这个特殊的 is attribute 给了我们一个变通的办法:

<table>
 <tr is="blog-post-row"></tr>
</table>

以上就是html中创建并调用vue组件的几种方法汇总的详细内容,更多关于html 创建调用vue组件的资料请关注三水点靠木其它相关文章!

Javascript 相关文章推荐
location.href 在IE6中不跳转的解决方法与推荐使用代码
Jul 08 Javascript
利用JS自动打开页面上链接的实现代码
Sep 25 Javascript
javascript 获取函数形参个数
Jul 31 Javascript
JavaScript Sort 的一个错误用法示例
Mar 20 Javascript
JavaScript实现强制重定向至HTTPS页面
Jun 10 Javascript
jquery pagination插件动态分页实例(Bootstrap分页)
Dec 23 Javascript
用JavaScript实现让浏览器停止载入页面的方法
Jan 19 Javascript
解析Vue2.0双向绑定实现原理
Feb 23 Javascript
详解Node.js开发中的express-session
May 19 Javascript
vue-router实现嵌套路由的讲解
Jan 19 Javascript
vue从后台渲染文章列表以及根据id跳转文章详情详解
Dec 14 Vue.js
JS开发前端团队展示控制器来为成员引流
Aug 14 Javascript
解决vue项目中出现Invalid Host header的问题
Nov 17 #Javascript
vue的webcamjs集成方式
Nov 16 #Javascript
SpringBoot在yml配置文件中配置druid的操作
Nov 16 #Javascript
详解JavaScript原型与原型链
Nov 16 #Javascript
详解JavaScript执行模型
Nov 16 #Javascript
Vue 实现拨打电话操作
Nov 16 #Javascript
微信小程序实现页面左右滑动
Nov 16 #Javascript
You might like
PHP时间戳与日期之间转换的实例介绍
2013/04/19 PHP
PHP中的自动加载操作实现方法详解
2019/08/06 PHP
在多个页面使用同一个HTML片段《续》
2011/03/04 Javascript
Jquery之Ajax运用 学习运用篇
2011/09/26 Javascript
js/ajax跨越访问-jsonp的原理和实例(javascript和jquery实现代码)
2012/12/27 Javascript
jQuery实现的自适应焦点图效果完整实例
2016/08/24 Javascript
javaScript嗅探执行神器-sniffer.js
2017/02/14 Javascript
使用vue构建移动应用实战代码
2017/08/02 Javascript
基于JavaScript中字符串的match与replace方法(详解)
2017/12/04 Javascript
vue在手机中通过本机IP地址访问webApp的方法
2018/08/15 Javascript
vue中rem的配置的方法示例
2018/08/30 Javascript
layui实现tab的添加拒绝重复的方法
2019/09/04 Javascript
详解Nuxt内导航栏的两种实现方式
2020/04/16 Javascript
[03:37]2016完美“圣”典 风云人物:Mikasa专访
2016/12/07 DOTA
Python字符和字符值(ASCII或Unicode码值)转换方法
2015/05/21 Python
详解Django中Request对象的相关用法
2015/07/17 Python
Eclipse中Python开发环境搭建简单教程
2016/03/23 Python
Python中的with语句与上下文管理器学习总结
2016/06/28 Python
详解python上传文件和字符到PHP服务器
2017/11/24 Python
python实现dijkstra最短路由算法
2019/01/17 Python
python中调试或排错的五种方法示例
2019/09/12 Python
Django实现任意文件上传(最简单的方法)
2020/06/03 Python
python MD5加密的示例
2020/10/19 Python
澳大利亚在线家具店:Luxo Living
2019/03/24 全球购物
英国绿色商店:Natural Collection
2019/05/03 全球购物
英国在线泳装店:Simply Swim
2019/05/05 全球购物
Ray-Ban雷朋瑞典官方网站:全球领先的太阳眼镜品牌
2019/08/22 全球购物
德国旅行、体验和活动的预订平台:Watado
2019/12/04 全球购物
电大自我鉴定范文
2013/10/01 职场文书
市场营销专业推荐信
2013/11/03 职场文书
车工岗位职责
2013/11/26 职场文书
大学社团活动策划书
2014/01/26 职场文书
珍惜时间演讲稿
2014/05/14 职场文书
财务会计岗位职责
2015/02/03 职场文书
电影焦裕禄观后感
2015/06/09 职场文书
elementui的el-popover修改样式不生效的解决
2021/06/30 Javascript