*Vue

vue-router

一、路由

一、导航式路由

路由路径由 标签配置 标签内 to属性值规定改标签指向的path路径;

路由对应视图 通过加载组件 加载到上

去首页

去新闻

配置路由的步骤:

1)定义组件--(试图加载的内容组件)Eg:var Home={ template:'

这是一个首页的页面

'}

2)配置路由 定义路由

Path 属性 配置路由地址 “*”默认路径下 redirect 属性配置路由重定向 component 属性 配置改地址需要加载的组件视图

3)实例化VueRouter

var router=new VueRouter({ /router 老老实实的写这个名字/

​ routes:routes

/*VueRouter里面的属性名称不能变 routes */

})

4)VueRouter挂载到Vue实例上面去var app=new Vue({ router:router, el:'#out' })

导航式路由

首页

关于

其他

index

about

other

404Not Found

——————————————————————————————————————————————————————————————

//组件对象

var Index ={

template:"#index"

}

var About ={

template:"#about"

}

var Other ={

template:"#other"

}

var Err ={

template:"#error"

}

// 路由规则

var routes=[

{path:"/index",component:Index},

{path:"/about",component:About},

{path:"/other",component:Other},

{path:"/",redirect:'/index'},

{path:"/error",component:Err},

{path:"*",redirect:'/error'}

]

//创建路由对象

var router=new VueRouter({

routes:routes

})

var vm = new Vue({

el:'#box',

router:router

})

——————————————————

导航样式

.router-link-active{

color:red;

}

二、编程式路由

事件中路由路径跳转————router.push('/other')

var Index ={

template:"#index",

methods:{

tap(){

router.push('/other')

}

}

}

导航标签会默认转换成a标签;可以用tag="div"转换成其他标签

首页

三、路由的传参

1、params——传单个参数

存储路径参数 path:“/index/:id”

获取 this.$route.params.id

{{item.pname}}

//创建组件

详情

{{str}}

//路由规则

{path:"/detail/:id",component:Detail},

// 组件对象

var About ={

template:"#about",

data:function(){

return{

arr:[]

}

},

mounted(){

var _this=this;

axios({

url:"http://jx.xuzhixiang.top/ap/api/productlist.php"

}).then(function(data){

_this.arr=data.data.data

})

}

}

var Detail ={

template:"#detail",

data:function(){

return{

str:''

}

},

mounted(){

//console.log(this.$route.params.id)

var _this=this;

axios({

url:"http://jx.xuzhixiang.top/ap/api/detail.php",

params:{id:_this.$route.params.id}

}).then(function(data){

// console.log(data)

_this.str=data.data.data.pname

})

}

}

2、query——可以传多个,以对象形式

query传参,只能在命名路由中实现

传参:

{{item.pname}}

规则配置

{path:"/home",component:Home,

children:[

{path:"/detail",name:'detail',component:Detail}

]

},

query传参,规则中不做任何参数的保留

接收参数:

mounted(){

var _this=this;

axios({

url:"http://jx.xuzhixiang.top/ap/api/detail.php",

params:{

id:_this.$route.query.id

}

}).then(function(data){

_this.str=data.data.data.pname

})

},

四、嵌套路由

1)父级路由

首页

用户

子路由

去子路由

2)配置路由 定义路由

子路由配置

{path:'/user',component:User,

'children':[

/定义自组件的路由/

{ path:'username',component:UserName, } /注意:子路由前面的斜杠/

]

} ,

其他步骤一样

注意:在嵌套路由的时候,需要监听,视图切换通过watch检测路由参数更改

watch:{

'$route'(to,from){

}

}

路径:

​ 相对路径:不加 / 继承父级的路径

​ 绝对路径:/detail

3、嵌套路由代码示范

嵌套路由

home

about

home

  • {{item.pname}}

about

详情

{{str}}

————————————————————————————————————————————————————————————————————————

var Home={

template:"#home",

data:function(){

return{

arr:[]

}

},

mounted(){

var _this=this;

axios({

url:"http://jx.xuzhixiang.top/ap/api/productlist.php"

}).then(function(data){

_this.arr=data.data.data

})

}

}

var About={

template:"#about"

}

var Detail={

template:"#detail",

data:function(){

return{

str:''

}

},

mounted(){

var _this=this;

axios({

url:"http://jx.xuzhixiang.top/ap/api/detail.php",

params:{

id:_this.$route.params.id

}

}).then(function(data){

_this.str=data.data.data.pname

})

},

watch:{

'$route':function(a){

var _this=this;

axios({

url:"http://jx.xuzhixiang.top/ap/api/detail.php",

params:{

id:a.params.id

}

}).then(function(data){

_this.str=data.data.data.pname

})

}

}

}

var routes=[

{path:"/home",component:Home,

children:[

{path:"/detail/:id",component:Detail}

]

},

{path:"/about",component:About},

{path:"/",redirect:"/home"}

]

var router=new VueRouter({

routes:routes

})

var vm = new Vue({

el:'#box',

router:router

})

五、命名路由

路径的另一种定义方式 绑定属性to 对象 name的值为设置的路由路径

对比:

home

about

name属性设置路由视图名字--无名字默认default

下方路由规则里配置:

对比:

{path:"/home",component:Home} //这里的path必须与to的值一致

{path:"/aaa",name:'hello',component:About},//这里的path里可以任意写

一个页面加载多个视图

{path:'/index',name:'index', components:{default:index,page:about}},

通过名字匹配加载的容器

{path:"/index",components:{

default:Index,

'other':Other

}

},

六、路由 +动画

Transition标签包含 router-view标签即可

enter-active-class="animated bounceInLeft"

leave-active-class="animated bounceOutRight"

>

七、路由的钩子函数

beforeRouteEnter(to,from,next){ next( ) } 路由进入钩子函数 next()方法调用才会触发路由切换

beforeRouteUpdate(to,from,next) 路由更新钩子函数

beforeRouteLeave(to,from,next) 路由离开钩子函数

二、自定义指令

1、两种:全局、私有;

全局:

Vue.directive('color',{

inserted:function(a,b){ /*这个元素插入父元素的时候执行的操作*/

a.style.color='blue';

}

})

私有:

var vm = new Vue({

el:"#box",

directives:{

'bac':{

inserted:function(a,b){

a.style.background='yellow'

}

}

}

})

a就指的是获取到的dom节点(下图中的el);参数b是一个对象(下图中的binding),属性如下:

[图片上传失败...(image-d752f8-1540860357631)]

value:可以解析变量,进行业务逻辑的处理;

expression: 只能以字符串输出;

注意:自定义命令可以绑定实例化对象里的任意变量;

举例:

lorem

data:{

str:"hello"

},

打印结果:

expression:str

value:hello

arg:给指令传参:

传参方式:

lorem

取参值: b.reg 结果是 str

只能传字符串常量;想当成变量解析,只能以绑定值得形式;

modifiers:修饰符:以 . 的形式链式的写法,返回键值对:案例如图;

2、钩子函数:

bind: 只调用一次,指令第一次绑定到元素时调用,用这个钩子函数可以定义一个在绑定时执行一次的初始化动作;

inserted: 被绑定元素插入父节点时调用。(bind与该生命周期钩子函数作用十分类似)

update: 被绑定元素所在的模板更新时调用,而不论绑定值是否变化。通过比较更新前后的绑定值,可以忽略不必要的模板更新。

componentUpdated: 被绑定元素所在模板完成一次更新周期时调用。

3、简写形式

正常形式:

directives:{

'bac':{

inserted:function(a){

a.style.background='yellow'

},

update:function(a){

a.style.background='blue'

},

}

}

简写形式

directives:{

/*简写 表示bind 和update的时候都会执行*/

'color':function(el,binding){

el.style.color=binding.value;

}

}

实例:拖拽;

————————————————————————————————————————————————————————

var vm = new Vue({

el:"#wrap",

directives:{

'move':function(a,b){

a.οnmοusedοwn=function(e){

var x = e.clientX - a.offsetLeft;

var y = e.clientY - a.offsetTop;

document.οnmοusemοve=function(e){

a.style.left = e.clientX - x +"px";

a.style.top = e.clientY - y +"px";

}

document.οnmοuseup=function(e){

document.οnmοusedοwn=null;

document.οnmοusemοve=null;

}

};

}

}

})

三、脚手架

1、安装脚手架(全局安装,只需一次)

npm install vue-cli -g

2、项目构建

官方模版 vue init webpack my-project (tips:代码语法检查较麻烦)

推荐 vue init webpack-simple my-project (适合开发经验丰富者)

根据提示 进行依赖安装

​ 项目启动 npm run dev

项目打包 npm run build

单文件组件 css拥有作用域,

scoped属性可规定当前css只作用于自己的组件,不影响其他

3、插件安装

1、插件安装 axios : npm install axios —-save-dev

哪个文件需要使用,就在该文件的js中 导入 import axios from ‘axios’

2、路由 vue-router (tips:路由规则配置均在main.js中)

依赖安装 nam install vue-router —-save-dev使用

在main.js引入 import VueRouter from ‘vue-router’

声明使用 在main.js 中 Vue.use(VueRouter)

3、Vue ui框架Element --pc (算是目前支持vue2.0最好的ui框架)

npm i element-ui -s

Mintui ---基于Vue的移动端ui框架 Vue.use(MintUi)

Vux

Framework7Tips;

vue全家桶 指(vue + vuex + vue-router + axios)

php 自定义sql 脚手架,vue路由、自定义指令、脚手架相关推荐

  1. vue自定义html模板,vue中自定义html文件的模板

    如果默认生成的 HTML 文件不适合需求,可以创建/使用自定义模板. 一是通过 inject 选项,然后传递给定制的 HTML 文件.html-webpack-plugin 将会自动注入所有需要的 C ...

  2. Linux运行脚手架vue,vue-cli 快速搭建脚手架

    使用 Vue.js 开发大型应用时,我们需要考虑代码目录结构.项目构建和部署.热加载.代码单元测试等事情.如果每个项目都要手动完成这些工作,那无疑效率是低下的,所以通常我们会使用一些脚手架工具来帮助完 ...

  3. 怎么将vue模板转换为html,vue中自定义html文件的模板

    如果默认生成的 HTML 文件不适合需求,可以创建/使用自定义模板. 一是通过 inject 选项,然后传递给定制的 HTML 文件.html-webpack-plugin 将会自动注入所有需要的 C ...

  4. 自定义报错返回_MybatisPlus基础篇学习笔记(五)------自定义sql及分页查询

    本章目录 自定义sql 分页查询 1. 自定义sql 在dao文件中编写自定义接口,并在方法上使用注解形式注入SQL,如图所示: 第一种: 第二种 ① application.yml加入下面配置 my ...

  5. vue自定义组件,插槽,自定义事件

    vue组件套娃 1. vue自定义组件 2. 组件和插槽套娃 3. vue组件通过自定义事件更改vue实例中的数据 1. vue自定义组件 语法 Vue.component('自定义组件名', {pr ...

  6. VUE使用自定义指令对普通 DOM 元素进行底层操作

    使用vue的自定义指令来整合某个重复使用的底层操作 举个聚焦输入框的例子,如下: 当页面加载时,该元素将获得焦点 (注意:autofocus 在移动版 Safari 上不工作).事实上,只要你在打开这 ...

  7. Vue.directive自定义指令

    Vue除了内部指令,我们也可以定义一些属于自己的指令,比如我们要定义一个v-diy的指令,作用就是让文字变成红色. 写好了这个功能,我们现在就自己定义一个全局的指令.我们这里使用Vue.directi ...

  8. VSCode自定义代码片段11——vue路由的配置

    vue路由的配置 {// v'router// 11 如何自定义用户代码片段:VSCode =>左下角设置 =>用户代码片段 =>新建全局代码片段文件... =>自定义片段名称 ...

  9. Vue.js自定义指令的用法与实例

    市面上大多数关于Vue.js自定义指令的文章都在讲语法,很少讲实际的应用场景和用例,以致于即便明白了怎么写,也不知道怎么用.本文不讲语法,就讲自定义指令的用法. 自定义指令是用来操作DOM的.尽管Vu ...

最新文章

  1. MIT类人机器人开始耍杂技了,看这个后空翻它漂亮吗?
  2. 2019中国独角兽新增数锐减62%,仅有22家;美国新增78家,占全球大半
  3. java 基础api实现上传,上传文件到7牛云存储的java api一个简单的demo实现
  4. [POJ2184] Cow Exhibition
  5. Asp.Net Core SignalR 用泛型Hub优雅的调用前端方法及传参
  6. Flowable 6.4.1数据库自动建表错误 SQLSyntaxErrorException: Table 'flowable.act_id_property' doesn't exist
  7. 【操作系统】常见进程调度算法特点总结比较
  8. 【英语学习】【WOTD】veritable 释义/词源/示例
  9. php中is null,php中empty(), is_null(), isset()函数区别
  10. js的异常捕获try和catch语句
  11. 将Python字符串转换为Int,将Int转换为String
  12. 张志峰:华尔街归来11年
  13. 矢量绘图软件 android,sai绘图软件官方
  14. 深刻理解Binder机制
  15. 人工智能如何可以思考?
  16. 外汇EA如何需看这四点
  17. 百度统计 页面代码安装状态:代码未生效 解决
  18. STM8L051比较器使用案例(二)COMP1+COMP2构成窗口比较器
  19. 叒一次算法作业hhhhhhhh
  20. 豆瓣电影top250信息爬取

热门文章

  1. 优质的冰川 雪地cc0高清摄影图片素材推荐,不容错过
  2. Git 上传代码命令
  3. How to build OpenBLAS for iPhone iOS
  4. Unity调用外部摄像头/网络摄像头/手机摄像头
  5. python私有变量什么意思_Python私有变量解析
  6. 虹科分享|终端安全防护|您的遗留系统的安全性如何?
  7. gearman mysql 扩展_Gearman分布式任务处理系统(二)扩展应用
  8. 什么产品适合做私域流量?品牌都适合做私域吗
  9. win11连接win7共享打印机的方法
  10. vue 封装js常用工具函数包