VueJS教程3

目录

  • 13、Vue实例
    • 13.1 动态组件(Tab切换、简化版留言板)
    • 13.2 使用Vue开发TodoList
  • 14、Vue CLI
    • 14.1 使用vue-cli开发TodoList

  接着VueJS教程2。


13、Vue实例

13.1 动态组件(Tab切换、简化版留言板)

  • 参考:https://vuejs.bootcss.com/v2/guide/components.html
  • 参考:vueJS-component标签

  举例1(component标签:是Vue框架自定义的标签,它的用途就是可以动态绑定我们的组件,根据数据的不同更换不同的组件):

 1 <!DOCTYPE html>
 2 <html>
 3 
 4 <head>
 5     <meta charset="utf-8">
 6     <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
 7     <meta http-equiv="Content-Language" content="zh-cn" />
 8     <title>My test page</title>
 9     <script src="https://unpkg.com/vue"></script>
10     <style>
11         .tab-button {
12             padding: 6px 10px;
13             border-top-left-radius: 3px;
14             border-top-right-radius: 3px;
15             border: 1px solid #ccc;
16             cursor: pointer;
17             background: #f0f0f0;
18             margin-bottom: -1px;
19             margin-right: -1px;
20         }
21 
22         .tab-button:hover {
23             background: #e0e0e0;
24         }
25 
26         .tab-button.active {
27             background: #e0e0e0;
28         }
29 
30         .tab {
31             border: 1px solid #ccc;
32             padding: 10px;
33         }
34     </style>
35 </head>
36 
37 <body>
38     <div id="app">
39         <button v-for="(tab, index) in tabs" v-bind:key="index" v-bind:class="{'tab-button': current_tab === tab}"
40             @click="current_tab = tab">{{ tab }}</button>
41 
42         <component :is="currentTabComponent" class="tab"></component> <!-- currentTabComponent:已注册组件的名字,或一个组件的选项对象 -->
43     </div>
44 
45     <script>
46         Vue.component('tab-home', {
47             template: '<div>Home component</div>'
48         })
49         Vue.component('tab-posts', {
50             template: '<div>Posts component</div>'
51         })
52         Vue.component('tab-archive', {
53             template: '<div>Archive component</div>'
54         })
55 
56         var app = new Vue({
57             el: '#app',
58             data: {
59                 current_tab: 'Home',
60                 tabs: ['Home', 'Posts', 'Archive']
61             },
62             computed: {
63                 currentTabComponent() {
64                     return 'tab-' + this.current_tab.toLowerCase();
65                 }
66             },
67         })
68     </script>
69 </body>
70 
71 </html>

  输出结果:

13.2 使用Vue开发TodoList

  举例1:

 1 <!DOCTYPE html>
 2 <html>
 3 
 4 <head>
 5     <meta charset="utf-8">
 6     <title>My test page</title>
 7     <script src="https://cdn.jsdelivr.net/npm/vue"></script>
 8 </head>
 9 
10 <body>
11     <div id="app">
12         <input type="text" placeholder="请输入事项" v-model="msg">
13         <button @click="handleSubmitBtn">提交</button>
14 
15         <todo-list v-for="(item, index) in list" :todo_item="item" :todo_index="index"
16             @click-sub-event="handleDelBtn($event)"></todo-list>
17     </div>
18 
19     <script>
20         Vue.component("todo-list", {
21             props: ['todo_item', 'todo_index'],
22             template: `                
23                 <ul>
24                     <li>
25                         {{ todo_index }}. {{ todo_item }}
26                         <button @click=handleClickSubComp(todo_index)>X</button>
27                     </li>                        
28                 </ul>                
29             `,
30             data: function () {
31                 return {
32 
33                 }
34             },
35             methods: {
36                 handleClickSubComp: function (index) {
37                     this.$emit("click-sub-event", index);
38                 }
39             }
40         });
41 
42         var app = new Vue({
43             el: '#app',
44             data: {
45                 msg: "",
46                 list: [],
47             },
48             methods: {
49                 handleSubmitBtn: function () {
50                     this.list.push(this.msg);
51                     this.msg = '';
52                 },
53                 handleDelBtn: function (index) {
54                     this.list.splice(index, 1);
55                     console.log(index);
56                 }
57             }
58         })
59     </script>
60 </body>
61 
62 </html>

  输出结果:

  举例2(结合 非父子组件之前传值(Bus/总线/发布订阅模式/观察者模式)):

 1 <!DOCTYPE html>
 2 <html>
 3 
 4 <head>
 5     <meta charset="utf-8">
 6     <title>My test page</title>
 7     <script src="https://cdn.jsdelivr.net/npm/vue"></script>
 8 </head>
 9 
10 <body>
11     <div id="app">
12         <todo-list-header></todo-list-header>
13         <todo-list-body></todo-list-body>
14     </div>
15 
16     <script>
17         Vue.prototype.bus = new Vue();
18 
19         Vue.component("todo-list-header", {
20             props: [],
21             template: ` 
22                 <div>
23                     <input type="text" placeholder="请输入事项" v-model="msg">
24                     <button @click="handleSubmitBtn">提交</button>
25                 </div>
26             `,
27             data: function () {
28                 return {
29                     index: 0,
30                     msg: "",
31                 }
32             },
33             methods: {
34                 handleSubmitBtn: function () {
35                     this.bus.$emit('click-submit-event', this.msg, this.index);
36                     this.msg = '';
37                     this.index++;
38                 },
39             },
40             mounted: function () {
41 
42             }
43         });
44 
45         Vue.component("todo-list-body", {
46             props: [],
47             template: `                
48                 <ul>
49                     <li v-for="(item, idx) in list">
50                         {{ item }}
51                         <button @click=handleDelBtn(idx)>X</button>
52                     </li>                        
53                 </ul>                
54             `,
55             data: function () {
56                 return {
57                     index: '',
58                     list: [],
59                 }
60             },
61             methods: {
62                 handleDelBtn: function (idx) {
63                     this.bus.$emit("click-delete-event", idx);
64                 }
65             },
66             mounted: function () {
67                 var this_ = this;
68 
69                 this.bus.$on('click-submit-event', function (msg, idx) {
70                     this_.list.push(msg);
71                     this_.index = idx;
72                 });
73 
74                 this.bus.$on('click-delete-event', function (idx) {
75                     this_.list.splice(idx, 1);
76                     console.log(idx);
77                 });
78             }
79         });
80 
81         var app = new Vue({
82             el: '#app',
83             data: {
84 
85             },
86             methods: {
87 
88             }
89         })
90     </script>
91 </body>
92 
93 </html>

  输出结果:

   举例3(在上述例子基础上进行简化(优化)):

 1 <!DOCTYPE html>
 2 <html>
 3 
 4 <head>
 5     <meta charset="utf-8">
 6     <title>My test page</title>
 7     <script src="https://cdn.jsdelivr.net/npm/vue"></script>
 8 </head>
 9 
10 <body>
11     <div id="app">
12         <todo-list-header></todo-list-header>
13         <todo-list-body></todo-list-body>
14     </div>
15 
16     <script>
17         Vue.prototype.bus = new Vue();
18 
19         Vue.component("todo-list-header", {
20             props: [],
21             template: ` 
22                 <div>
23                     <input type="text" placeholder="请输入事项" v-model="msg">
24                     <button @click="handleSubmitBtn">提交</button>
25                 </div>
26             `,
27             data: function () {
28                 return {
29                     index: 0,
30                     msg: "",
31                 }
32             },
33             methods: {
34                 handleSubmitBtn: function () {
35                     this.bus.$emit('click-submit-event', this.msg, this.index);
36                     this.msg = '';
37                     this.index++;
38                 },
39             },
40             mounted: function () {
41 
42             }
43         });
44 
45         Vue.component("todo-list-body", {
46             props: [],
47             template: `                
48                 <ul>
49                     <li v-for="(item, idx) in list">
50                         {{ item }}
51                         <button @click=handleDelBtn(idx)>X</button>
52                     </li>                        
53                 </ul>                
54             `,
55             data: function () {
56                 return {
57                     index: '',
58                     list: [],
59                 }
60             },
61             methods: {
62                 handleDelBtn: function (idx) {
63                     this.list.splice(idx, 1);
64                     console.log(idx);
65                 }
66             },
67             mounted: function () {
68                 var this_ = this;
69 
70                 this.bus.$on('click-submit-event', function (msg, idx) {
71                     this_.list.push(msg);
72                     this_.index = idx;
73                 });
74             }
75         });
76 
77         var app = new Vue({
78             el: '#app',
79             data: {
80 
81             },
82             methods: {
83 
84             }
85         })
86     </script>
87 </body>
88 
89 </html>

  输出结果:同上。 

14、Vue CLI

 

14.1 使用vue-cli开发TodoList

 

转载于:https://www.cnblogs.com/zyjhandsome/p/11179701.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/386405.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

春招我借这份PDF的复习思路,论程序员成长的正确姿势

一. 开发背景 想要成为一名优秀的Android开发&#xff0c;你需要一份完备的知识体系&#xff0c;在这里&#xff0c;让我们一起成长为自己所想的那样。 面试总结 面试大厂一定要做好充分的准备&#xff0c;没有准备就去面试完全是去当炮灰的&#xff0c;更是对自己的不负责。再…

T-SQL语句学习(三)

这部分介绍下视图、索引技术。 1、视图&#xff1a;是从一个或几个基本表&#xff08;或视图&#xff09;导出表。视图与基本表不同&#xff0c;是一个虚表。 当基本表中的数据发生变化时&#xff0c;从视图中查询出来的数据也会随之改变。 1.1 定义视图 a、创建视图的语法要求…

普通二本的辛酸Android面试之路,满满干货指导

一、自我介绍 应该算是起点比较高吧&#xff01;985大学毕业后面一直在国外读研。之前准备面试微软但是可能经验不够&#xff0c;没有通过。经过朋友介绍我准备回国&#xff0c;积累一些开发经验。于是我面试了国内大厂BATJ&#xff0c;还有一些其他比较知名的公司&#xff0c…

普通二本的辛酸Android面试之路,算法太TM重要了

前言 编程是一个江湖&#xff0c;江湖之大&#xff0c;鱼龙混杂&#xff0c;一部分江湖人士乃虾兵蟹将&#xff0c;一不小心就被一箭射死&#xff0c;我们称之为“码农”&#xff0c;这些人事江湖的重要组成部分&#xff0c;他们承担着堆砌代码&#xff0c;实现功能设计的使命…

SQL常用日期处理函数(转)

/**datepart()函数的使用 * datepart()函数可以方便的取到时期中的各个部分*如日期&#xff1a;2006-07--02 18&#xff1a;15&#xff1a;36.513* yy:取年 2006* mm:取月 7* dd:取月中的天 2* dy:取年中的天 183* wk:取…

最全的BAT大厂面试题整理,系列篇

前言 看到一篇文章中提到“最近几年国内的初级Android程序员已经很多了&#xff0c;但是中高级的Android技术人才仍然稀缺“&#xff0c;这的确不假&#xff0c;从我在百度所进行的一些面试来看&#xff0c;找一个适合的高级Android工程师的确不容易&#xff0c;一般需要进行大…

最全面试考点与面试技巧,大厂面经合集

前言 对于字节跳动的二面三面而言&#xff0c;FrameworkMVP架构HashMap原理性能优化Flutter源码分析等问题都成高频问点&#xff01;然而很多的朋友在面试时却答不上或者答不全&#xff01;今天在这分享下这些问点的视频解析给大家&#xff0c;希望对有需要的朋友有所帮助&…

阿里云sql监控配置-druid

今天我们说说数据源和数据库连接池&#xff0c;熟悉java开发的同仁应该都了解C3PO&#xff0c;在这里不做过多的赘述了&#xff0c;今天我们说的是阿里DRUID&#xff0c;druid是后起之秀&#xff0c;因为它的优秀很快占领了使用市场&#xff0c;下边我们一起来看看druid数据源的…

最全面试考点与面试技巧,真香!

写在前面 身边有不少去大厂面试的朋友&#xff0c;其中小金面试字节跳动的经历很有意义&#xff0c;在这里分享给大家。小金是末流211计算机专业大三本科生&#xff0c;前几天面试了字节跳动的广州Android开发实习生。下面是他的面试经历&#xff0c;还有一些他自己的经验。 …

最强Android教程!2021年Android面经分享,大厂面经合集

前言 找工作还是需要大家不要紧张&#xff0c;有我们干这一行的接触人本来就不多 难免看到面试官会紧张&#xff0c;主要是因为怕面试官问的问题到不上来&#xff0c;那时候不要着急 &#xff0c;答不上了的千万不然胡扯一些&#xff0c;直接就给面试官说这块我还没接触到&…

最强整理!字节跳动历年Android中高级面试题全收录!附超全教程文档

开头 让我们一起来看看&#xff0c;字节跳动的第三面&#xff0c;面试官都问了什么&#xff1f;&#xff08;第一二面的题目及答案已整理&#xff0c;需要的可以在文末领取&#xff09; 从七月中旬开始&#xff0c;我前前后后差不多一共投递了八十份简历&#xff0c;到目前为…

最新BAT大厂面试者整理的Android面试题目模板,分享PDF高清版

前言 从毕业到现在面试也就那么几家公司&#xff0c;单前几次都比较顺利&#xff0c;在面到第三家时都给到了我offer&#xff01;前面两次找工作&#xff0c;没考虑到以后需要什么&#xff0c;自己的对未来的规划是什么&#xff0c;只要有份工作&#xff0c;工资符合自己的要求…

最新BAT大厂面试者整理的Android面试题目模板,成功入职字节跳动

前言 **一年中第一段跳槽高潮就要来了&#xff0c;**看到同事一个个离职&#xff0c;又有一部分同事已经找到满意的工作&#xff0c;于是自己也盲目的开始面试起来&#xff08;期间也没有准备充分&#xff09;&#xff0c;日夜奔走&#xff0c;简历投了很多家公司&#xff0c;…

算法题+JVM+自定义View,终局之战

关于面试题 打个比方&#xff0c;如果把找工作理解成考大学&#xff0c;面试就是高考&#xff0c;市面上的“真题”就是模拟试卷。我们会很容易倾向于在面试前寻找对应公司的面试“真题”&#xff0c;重点准备&#xff0c;期待“押题”成功。但实际上&#xff0c;即使面试同一…

系统学Android从零开始,搞懂这些直接来阿里入职

开头 很多人说Android开发前景越来越差了 我觉得这个回答是片面的 首先Android应用开发前景差是在最近两年出现的&#xff0c;也就是从2018开始&#xff0c;从那时起移动端的程序员已经慢慢出现供大于求的局面&#xff0c;本人作为移动端开发&#xff0c;深知这一点。 然而也…

Bginfo软件在域的部署和应用

在企业的IT管理中&#xff0c;很多用户都不知道怎么去查看自己计算机的IP地址、登陆帐户。而对于网络管理人员来说&#xff0c;他们可能需要知道用户在域中登录的一些信息&#xff0c;如那些用户登录过&#xff0c;在什么时间登录&#xff0c;IP和MAC地址是多少&#xff1b;需要…

系统学Android从零开始,详细的Android学习指南

Android面试相关整理 最近有一点找工作的打算&#xff0c;想补下面试题。但是发现网上面试相关的文章特别多&#xff0c;不知道从何看起&#xff0c;所以简单的总结了一下我有印象的一些&#xff0c;方便自己随时查看&#xff0c;本想带下个人评价&#xff0c;但有些没有仔细看…

WPF中解决内存泄露的几点提示与解决方法

一直以来用WPF做一个项目&#xff0c;但是开发中途发现内存开销太大&#xff0c;用ANTS Memory Profiler分析时&#xff0c;发现在来回点几次载入页面的操作中&#xff0c;使得非托管内存部分开销从起始的43.59M一直到150M&#xff0c;而托管部分的开销也一直持高不下&#xff…

组件化与插件化的差别在哪里?内含福利

前言 今年上半年其实就已经有了换工作的想法,奈何疫情原因和岗位缩减&#xff0c;加之信心不足&#xff0c;到六月底投递了百度的Android岗位,本以为像我这种非211、985没工作经验的渣渣只能被直接pass,结果却意外的收到了电话,真是受宠若惊.经过电面,技术三面,然后就是等通知…

MapXtreme2004 vs2005的官方回答

自从ms公开vs belta测试版后&#xff0c;很多人员一直在试用。而正式版已发布&#xff0c;很多大型项目已经迁移到vs2005下来了&#xff0c;我象很多人一样&#xff0c;关心MapXtreme2004与vs2005的兼容性。我也做了一些试验&#xff0c;基本上&#xff0c;所有的大型的.net组件…