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,一经查实,立即删除!

相关文章

html网页加入一个按钮,在html网页设计中,一个“登录”按钮怎么编写代码?

html网页设计&#xff1a;一个简单的登录界面代码&#xff01;在html网页设计中&#xff0c;一个“登录”按钮怎么编写代码&#xff1f;列如所给图片的“登录”按钮怎么用html代码显示出来&#xff0c;要求能够识别是否输入用户名和密码&#xff01;是这样的效果吗&#xff1f;…

blender的汉化方法!

本人对于此只是初步认知阶段&#xff0c;也许对于电脑高手来说&#xff0c;这只是小儿科。但对于我来说&#xff0c;能够摸索出其中的方法&#xff0c;还是费了一些力气&#xff0c;所以&#xff0c;也蛮有成就感。希望拿来与同是处于初学水平的朋友共同学习。 blender这个软件…

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…

[Linux] 007 目录处理命令

1. 目录处理命令&#xff1a;mkdir 命令名称&#xff1a;mkdir命令英文原意&#xff1a;make directories命令所在路径&#xff1a;/bin/mkdir执行权限&#xff1a;所有用户语法&#xff1a;mkdir -p [目录名]功能描述&#xff1a; 创建新目录-p 递归创建范例&#xff1a; mkdi…

计算机科学与技术专业《计算机网络原理》课程实验指导书,计算机科学导论,课程实验指导书解读.pdf...

计算机科学导论实验指导书聊城大学计算机学院聊城大学计算机学院聊城大学计算机学院聊城大学计算机学院2010 年年 8 月月年年 月月《计算机科学导论》课程实验指导书目 录《计算机科学导论》课程实验教学大纲 1实验一 计算机基本操作 3基本信息 3实验预习 3实验过程 4实验数据和…

Java Singleton设计模式

它是Java中最简单的设计模式之一。 如果有人问我哪种设计模式好&#xff0c;那么我会很自豪地说Singleton。 但是&#xff0c;当他们深入询问单身人士的概念时&#xff0c;我感到很困惑。 真的单身是那么困难吗&#xff1f; 确实不是&#xff0c;但是它有许多我们需要了解的…

elasticsearch配置文件解析

1.Cluster&#xff08;集群&#xff09;# 集群名称标识了你的集群&#xff0c;自动探查会用到它。默认值为elasticsearch# 如果你在同一个网络中运行多个集群&#xff0c;那就要确保你的集群名称是独一无二的。## cluster.name: my-application 2.Node&#xff08;节点&#xf…

刚刚出炉的Asp.net网站部署视频教程

刚刚出炉的Asp.net网站部署视频教程,希望对新手朋友有所帮助主要包括内容&#xff1a; 1、IIS的安装与配置 2、Asp.net环境的安装与常见问题解决 3、Asp.net网站的配置和使用 51aspx会陆续推出基础教程与大家见面&#xff0c;敬请期待&#xff01; 中间不妥之处还希望大家多多包…

添加jQuery方法解析url查询部分

Web前端不同页面间传值可以使用 cookies、localStorage 和 sessionStorage 等本地存储。 但是&#xff0c;今天我们尝试使用 url 查询&#xff0c;假设我们要传递字符串 str 到 modify.html 页面&#xff1a; var str "nameBob Chen&gender男&date1998/04/26&am…

计算机网络 实验教案,《计算机网络》实验教案.pdf

《计算机网络》实验教案《计算机网络》实验教案临沂师范学院信息学院1实验一 网线制作与以太网组网一、实验目的和要求使学生掌握RJ &#xff0d;45 头的制作。学会以太网组网。二、实验课时&#xff1a;2 课时。三、实验环境与工具RJ&#xff0d;45 头若干、双绞线若干米、RJ&…

Java 8可选:如何使用它

Java 8带有新的Optional类型&#xff0c;类似于其他语言中提供的类型。 这篇文章将介绍这种新类型的使用方式&#xff0c;即主要用途。 什么是可选类型&#xff1f; 可选的是新容器类型&#xff0c;如果有可用值&#xff0c;则该容器类型将包装单个值。 因此&#xff0c;其含义…

strip用法

Python strip() 方法用于移除字符串头尾指定的字符&#xff08;默认为空格或换行符&#xff09;或字符序列。 注意&#xff1a;该方法只能删除开头或是结尾的字符&#xff0c;不能删除中间部分的字符。 str "00000003210Runoob01230000000"; print str.strip( 0 ); …

为JAVA性能而设计(一)

为JAVA性能而设计&#xff08;一&#xff09; 发布时间&#xff1a;2007-1-9 15:51:42 来源&#xff1a;JavaWorld 作者&#xff1a;Brian Go…为JAVA性能而设计&#xff08;二&#xff09; 发布时间&#xff1a;2007-1-9 15:52:57 来源&#xff1a;JavaWorld 作…

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…

DataFrame.to_dict(orient='dict')英文文档翻译

本文转载自 https://blog.csdn.net/llx1026/article/details/77929287 DataFrame.to_dict(orientdict)将DataFrame格式的数据转化成字典形式参数&#xff1a;当然参数orient可以是字符串{dict, list, series, split, records, index}中的任意一种来决定字典中值的类型字典dict&…

如何在J2ME中创建MIDlet

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

感悟测试驱动开发

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

如何用python写html的插件,使用python开发vim插件及心得分享

如何使vim下开发python调试更方便如何用 Python 给 Vim 写插件如何使 Vim 下开发 Python 调试更方便怎么用python调用matlab&#xff1f;打算用vim写Python 各位指点下:w 之后 文件被保存到哪了? 桌面上有个文件夹 怎么才能保存进去? 如何让:w保存在当前目录下 :q退出vim :wq…