use vue vuex vue-router, not use webpack

     vue,vuex,vue-router放在一起能做什么?不用webpack之类的打包工具使用他们是否可行?各位道友在初学vue时是否有这样的困惑。因为现代构建前端项目的一般模式是:

  • 安装webapck,某种是glup,grunt,或者是fis等构建工具
  • 然后安装一个包管理器,npm,bower,或者说是新一代:yarn
  • 再然后用 包管理器 安装各种各样的包,如:vue,bootstrap,vuex等。
  • 其后用es6的import或者是node的require引入包
  • 最后通过 构建工具 打包或发布项目

     在这个过程中你是否发现开发者越来越依赖构建工具,你是否想过构建工具帮助我们解决了很多问题,但他也让你不能快速的感知和了解库或者框架的本质。这次就简单点,用vue,vuex,vue-router,但不用webpack做一个示例,主要目的皆在了解这些库的本质,或者说是是基础应用。

你能看到的知识点

  • vue-router的简单应用,包含:基础配置路由配置,子路由。
  • vuex的应用,包含:多组件共享同一份数据。
  • vue组件生命周期的理解。

代码结构图

  • form,comp,life通过路由导航到组件
  • comp中compA和compB是通过子路由导航到组件
  • inputComp comboComp实现一个输入数据动态反映到其他组件的示例
  • lifeUpdate:主要测试组件生命周期中的beforeUpdate勾子
  • compB:展示了inputComp输入的数据,皆在展示vuex的能力
  • lifeList:测试组件完全生命周期,但不包含beforeUpdate和updatedg两个勾子

示例展示

     本示例利用vue-router做为导航,其中结合了vue和vuex相关知识,如果你想单独了解其中的某一个库,可访问vue原来可以这样上手vuex原来可以这样上手这两个链接。如果你还想和我们一起讨论前端技术,可以加入本人创建的QQ群,群号在左侧。单击下载示例源码

重点介绍

    以下截取的都是代码片断,或者是减少后的代码,只表其意。如需要看完整的还是下载示例源码看吧。

vue-router介绍

js代码:

var routeropt = [ 
{ path: '', component: form },
{ path: '/form', component: form},
{ path: '/comp', component: comp, children:[
{ path: '', component: compA },
{ path: 'compA', component: compA },
{ path: 'compB', component: compB }
]},
{ path: '/life', component: compLife }
];
var router = new VueRouter({ routes: routeropt });

html代码:

<div id="app"> 
<ul class="nav nav-tabs"> 
<li><router-link to="/form">选择下拉列表</router-link></li>
<li><router-link to="/comp">子组件路由</router-link></li>
<li><router-link to="/life">生命周期</router-link></li>
</ul>
<router-view></router-view> 
</div>

说明:

  • 注册路由和子路由很简单,注册子路由只需在路由中增加children数组即可,如/comp下就注册了两个子路由。
  • router-view是显示路由导航的组件内容,他可以用name属性指定具体要显示的某个组件。

vuex的多组件引用

  • vuex的store中的state定义了list集合,以及对list集合的相关getter,actions,muations等。
var state = {
list: [{"id":1, "name": "001"}]
};
var mutations = {
ADDITEM: function(argState, item){
argState.list.push(item);
}
};
var getters = {
getList:function(argState){
return argState.list;
}
}
var actions = {
addItem:function(dis,item){
dis.commit('ADDITEM',item);
}
}
  • 在inputComp中通过$store.dispatch来触发actions中addItem方法,用于向list添加一条数据
createElement('button',{
on:{
"click": function(event){
self.$store.dispatch('addItem',{"id":2,"name": self.value});
}
},
  • ComboComp和compB组件中通过访问getters获取list的数据
    comboComp组件中的代码:
createElement("ul",
{
class:{
"dropdown-menu":true
},
attrs:{
"aria-labelledby":"dr02"
}
}, self.$store.getters["getList"].map(function(item){
return createElement("li",item.name);
}))

compB组件中的代码:

computed: {
list: function(){ 
return this.$store.getters.getList;
}
}

vue组件的生命周期介绍

  • compLife实现生命周期的勾子,lifeList显示生命周期的执行过程。
    • beforeRouteEnter和beforeCreate在执行时,组件实例还没有创建完成,所以用next和nextTick来执行日志输出
    • beforeRouteEneter,beforeRouteUpdate,beforeRouteLeave等是vue-router增加的勾子
    • 没有展示beforeUpdate和updated勾子
beforeCreate: function(){ 
var self = this, obj = {eventId: index  , eventName: 'beforeCreate--nextTick'};
this.$nextTick(function(){
self.addItem(obj);
});
},
created: function(){
this.addItem({eventId: index  , eventName: 'created-----------------------'});
this.title = '生命周期';
},
beforeMount: function(){
this.addItem({eventId: index  , eventName: 'beforeMount'});
},
mounted: function(){ 
this.addItem({eventId: index  , eventName: 'mounted'});
},
activated: function(){ //keep-alive激活时
this.addItem({eventId: index  , eventName: 'activated'});            
},
deactivated: function(){            
this.addItem({eventId: index  , eventName: 'deactivated'});
},
beforeDestroy: function(){
this.addItem({eventId: index  , eventName: 'beforeDestroy'}); 
},
destroyed: function(){
this.addItem({eventId: index  , eventName: 'destroyed'});
},
beforeRouteEnter: function(to, from, next){ 
var obj = {eventId: index  , eventName: 'router: beforeRouteEnter--nextTick'};
next(function(vm){
vm.addItem(obj);
})
},
beforeRouteUpdate: function(to, from, next){// 路由修改时 V2.2
this.addItem({eventId: index  , eventName: 'router: beforeRouteUpdate'});
next(true);
},
beforeRouteLeave: function(to, from, next){ //路由离开当前组件时
this.addItem({eventId: index  , eventName: 'router: beforeRouteLeave'});
next(true);
}
  • beforeUpdate和updated的展示
    • beforeUpdate是最一次更新数据的机会,且不会导致重复渲染,但在beforeUpdate中修改 $store,或者是通过$emit改变非本组件的内容,并导致了VNODE的改变,都会引起重复渲染(死循环)。
    • updated中数据时不能影响VNODE的改变,否则会导致重复渲染(死循环)
  • 示例代码在lifeUpdate组件中,代码如下:
beforeUpdate: function(){ //最后一次修改渲染到DOM上数据的机会,不会导致重复执行渲染,而updated中修改状态会导致重复渲染
//但在beforeUpdate中修改 $store,或者是$emit 来通知改变非本组件的VNODE,都会导致重复渲染
this.msg = '我不导致重复渲染';
}

更多专业前端知识,请上 【猿2048】www.mk2048.com

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

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

相关文章

SQL重复记录查询(转载)

1、查找表中多余的重复记录&#xff0c;重复记录是根据单个字段&#xff08;peopleId&#xff09;来判断select * from peoplewhere peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1) 例二&#xff1a;select * from testt…

ubuntu16 升级pip3后报错File /usr/bin/pip3, line 9, in module from pip import main ImportError: cannot...

问题&#xff1a;ubuntu16 执行pip3 install --upgrade pip之后&#xff0c;pip3执行出错。 Traceback (most recent call last): File "/usr/bin/pip3", line 9, in <module> from pip import mainImportError: cannot import name main 截图如下&#xff1a;…

HTTP 简介

1、HTTP 简介 HTTP协议&#xff08;HyperText Transfer Protocol&#xff0c;超文本传输协议&#xff09;&#xff0c;是用于从WWW万维网服务器传输超文本到本地浏览器的传送协议。 HTTP基于TCP/IP通信协议来传递数据&#xff08;HTML 文件, 图片文件, 查询结果等&#xff09…

计算机博士英语复试题目,博士复试自我介绍中英文双语解读

博士复试自我介绍中英文双语解读关于博士复试自我介绍中英文篇一(中文篇)尊敬的老师,晚上好!我很高兴能来这里参加面试。现在让我给一个简短的自我介绍。我是* * *,出生在* *。我是一个老师的信息科学与工程学院,山东科技大学。我在1997年进入这所大学,主修计算机科学与技术。2…

如何在J2ME中创建MIDlet

总览 Java移动应用程序称为J2ME。 通常&#xff0c;当我们在移动技术领域工作时&#xff0c;我们必须考虑J2ME应用程序。 通过这种方式&#xff0c;我们可以开发我们的移动应用程序&#xff0c;也可以通过jad或jar文件将其安装在我们的设备中。 近年来&#xff0c;手机开发中最…

感悟测试驱动开发

软件开发方法学的泰斗Kent Beck先生最为推崇"模式、极限编程和测试驱动开发"。在他所创造的极限编程&#xff08;XP&#xff09;方法论中&#xff0c;就向大家推荐"测试先行"这一最佳实践&#xff0c;并且还专门撰写了《测试驱动开发》一书&#xff0c;详细…

创建一个学生信息表,与页面分离

一、需求分析 做一个jsp页面&#xff0c;动态显示信息表的内容。 1、 做一个实体类&#xff1a;StudentInfo &#xff08;包含4个字段&#xff09; 2、 如图模拟生成3条数据&#xff0c;本质上就是new StudentInfo 3个实例&#xff0c;每个实例代表一行记录&#xff08;后面…

【Unity】材质基础

【Unity】材质基础 a.基本概念 b.Albedo Maps反射率贴图 c.Alpha Maps着色器shader下四大渲染模式 d.Metallic and Smoothness Maps e.Normal Maps法线贴图 f.Height Maps g.Occlusion Maps h.Emission Maps i.Detail Mask & Secondary Maps j.Standard 金属/Standard&…

科学计算机二进制算法,计算机是怎么理解二进制的?

计算机是怎么理解二进制的?计算机的发明最初纯粹是为了计算数字, 让一个机器能够通过输入不同的数字, 进行加减乘除等. 首先要约定好机器能处理的数是什么样的, 即输入是什么样的, 才能去制造计算机. 二进制只是一种尝试, 十进制也有科学家尝试过, 但由于复杂程度较二进制要高…

WPF 实现ScrollViewer的垂直偏移滚动跳转

问题&#xff1a;考虑屏幕大小&#xff0c;一般都是会在表单问卷的页面使用ScrollViewer。问卷中问题漏填漏选时&#xff0c;在提交时校验不过&#xff0c;需要滚动跳转至漏填漏选项。 页面如下&#xff1a; 每个选项使用StackPanel&#xff0c;并对复选框和单选的勾选事件进行…

限制 计算机中 某用户上网 win7,Win7旗舰版怎么限制孩子的上网时间?电脑限制孩子上网时间的方法...

Win7旗舰版怎么限制孩子的上网时间&#xff1f;我们在家里有孩子的时候非常害怕孩子沉迷与网络&#xff0c;不把心思放在学习上。所以会想方设法的限制孩子上网。那么我们怎么使用电脑的自带的功能限制孩子上网呢&#xff1f;下面小编就带着大家一起看一下吧&#xff01;设置管…

论图计算

自从机械计算开始以来&#xff0c;图形概念就已经存在&#xff0c;并且在纯数学领域已经存在了数十年。 由于数据库的黄金时代&#xff0c;图形在软件工程中变得越来越流行。 图形数据库提供了一种持久化和处理图形数据的方法。 但是&#xff0c;图形数据库并不是存储和分析图形…

html 拼接onmouseout,HTML onmouseout事件用法及代码示例

将鼠标指针移出元素或其子元素时&#xff0c;将发生HTML DOM onmouseout事件。用法:在HTML中&#xff1a;在JavaScript中&#xff1a;object.onmouseout function(){myScript};在JavaScript中&#xff0c;使用addEventListener()方法&#xff1a;object.addEventListener(&quo…

7 selenium 模块

selenium 模块 一.简介 1.Python的一个第三方库&#xff0c;对外提供的接口可以操作浏览器&#xff0c;然后让浏览器完成自动化的操作。 2.自动化测试工具,而爬虫中使用它主要是为了解决requests无法直接执行JavaScript代码的问题 selenium本质是通过驱动浏览器&#xff0c;完全…

针对新手的Java EE7和Maven项目-第3部分-定义ejb服务和jpa实体模块

从前面的部分恢复 第1部分 第2部分 我们在第三部分继续介绍&#xff0c;我们已经有一个父pom&#xff0c;并且已经为我们的war模块定义了pom。 在我们的原始设置中&#xff0c;我们定义了我们的应用程序将包含一个ejb jar形式的服务jar。 这是我们的Enterprise Java Bean&…

计算机本地网络如何共享,本地网络共享怎么实现

本地网络共享可以满足多台电脑同时联网&#xff0c;台式电脑实现网络共享可以使用路由器&#xff0c;笔记本电脑事项网络共享需要使用无线路由器或者无线网卡。那么本地网络共享又是如何实现的呢&#xff0c;下面为大家详细介绍一下。通过路由器实现本地网络共享&#xff1a;第…

Git初始化配置以及配置github

1&#xff0c;配置用户名和邮箱&#xff08;这里是我github中配置的用户名和邮箱&#xff09;&#xff0c;执行下面命令后&#xff0c;在C:\Users\yaosq盘下会出现一个全局文件.gitconfig. git config --global user.name "这里换上你的用户名" git config --global…

数据知识栈

并发不适合胆小者 我们都知道并发编程很难正确实现。 这就是为什么在执行线程任务之后要进行大量的设计和代码审查会议。 您永远不会将并发问题分配给经验不足的开发人员。 仔细分析问题空间&#xff0c;提出设计&#xff0c;并记录和审查解决方案。 这就是通常处理线程相关任…

Spring Boot:快速启动MVC

我打算一年多以前写一篇关于Spring Boot的文章。 最后&#xff0c;我有时间和灵感。 因此&#xff0c;准备10到15分钟的高质量Spring教程。 我将用Gradle和嵌入式Tomcat演示Spring Boot的基础知识。 我使用Intellij IDEA而不是Eclipse&#xff0c;但是对于那些习惯Eclipse的人来…

布里斯托大学计算机科学专业排名,2021年布里斯托大学世界及专业排名 多个领域位居全英前十!...

它既是红砖大学的成员&#xff0c;也是罗素大学集团成员&#xff0c;在这所学校里共培养出了13位诺贝尔奖得主&#xff0c;这所学校就是布里斯托大学&#xff0c;该校的83%的研究成果都达到了世界领先水平&#xff0c;因此&#xff0c;越来越多的学生去布里斯托大学留学&#x…