vue 路由、数据请求

 

  • 整个项目要用到的npm vue-cii   webpack 三者区别和意义:

npm: nodejs的包管理工具,下载nodejs自带npm包管理工具。(下载nodejs用到的npm是vue-cli和webpack的前提)

vue-cli : vue-cli是官方提供的快速构建这个单页面应用的脚手架, 前提是已经安装了node.js 否则npm都用不了,

使用npm全局安装vue-cli : npm install -g vue-cli 。 

vue-lic 是对webpack的一个封装和简化。

  • vue数据请求:

分为vue-resource请求数据(官方) 和 axios请求数据(第三方,不仅能在Vue里使用,还能在nodejs、react中使用。);

vue-resource:

 cnpm  install  vue-resource  --save   ; 安装然后引用, 加--save是为了在package.json中引用,表示在生产环境中使用。

  this.$http.post("接口url").then(function(result){
             这里写数据操作,get请求类似
             })
            .catch(function(error){
               console.log(error);
              });

axios方式: 

cnpm install --save axios 下载axios模块,注册axios,由于axios是非官方的模块无法使用Vue.use()方法来注册,只能在原型上注册:Vue.prototype.$axios= Axios;  语法:this.$axios.get ~~~  同上

 

vue 项目中跳转打开新窗口需使用this.$router.resolve  

因为路由对象的resolve方法解析路由,可以得到location、router、href等目标路由的信息 。

得到href就可以使用window.open开新窗口了。

 click: () => {
              let routeData = this.$router.resolve({
               name:'yunying_yueBaoBiao',   //跳转路由
               params:{//参数对象
                    yue:record.table_month,
                    nianyuejianyi:this.nianyuejianyi,
                    nianyue:this.nianyue,
                    tmcode:this.$route.query.tmcode
               }
           });
             window.open(routeData.href, '_blank');
          }

params只能用name来引入路由
而query 要用path引入

query 类似于我们ajax中get传参,在浏览器地址栏中显示参数
params则类似于post,在浏览器地址栏中不显示参数

打开新窗口目前只能使用this.$router.resolve  ,而resolve只能使用params传参,params是URL的一部分,

所以,URL中虽然不能可以隐藏掉参数名字,但是不可以隐藏参数值,

要想隐藏参数值只能在本页打开 并使用push等方式传参,则可隐藏!

 

  • vue 路由 :

router.push(location)

在vue.js中想要跳转到不同的 URL,需要使用 router.push 方法。

这个方法会向 history 栈添加一个新的记录,当用户点击浏览器后退按钮时,则回到之前的 URL。

当你点击

<router-link>

时,这个方法会在内部调用,所以说,点击

<router-link :to="...">

等同于调用

router.push(...)

声明式

<router-link :to="...">

编程式:router.push(...)//该方法的参数可以是一个字符串路径,或者一个描述地址的对象。

// 字符串
router.push('home')
// 对象
this.$router.push({path: '/login?url=' + this.$route.path});
// 带查询参数,变成/backend/order?selected=2
this.$router.push({path: '/backend/order', query: {selected: "2"}});
// 命名的路由
router.push({ name: 'user', params: { userId: 123 }})

router.replace(location)

设置 replace 属性(默认值: false)的话,当点击时,会调用 router.replace() 而不是 router.push(),于是导航后不会留下 history 记录。即使点击返回按钮也不会回到这个页面。

加上replace: true后,它不会向 history 添加新记录,而是跟它的方法名一样 —— 替换掉当前的 history 记录。

//声明式:
<router-link :to="..." replace></router-link>
// 编程式:
router.replace(...)
//push方法也可以传replace
this.$router.push({path: '/home', replace: true})

传参两种方式

使用query:

this.$router.push({
  path: '/home',
  query: {
    site: [],
    bu: []
}
})

使用params:

this.$router.push({
  name: 'Home',  // 路由的名称
  params: {
    site: [],
    bu: []
}
})

params:/router1/:id ,/router1/123,/router1/789 ,这里的id叫做params

query:/router1?id=123 ,/router1?id=456 ,这里的id叫做query。

两者都可以传递参数,区别是什么?

  1. query 传参配置的是path,而params传参配置的是name,在params中配置path无效
  2. query在路由配置不需要设置参数,而params必须设置
  3. query传递的参数会显示在地址栏中
  4. params传参刷新会无效,但是query会保存传递过来的值,刷新不变 ;

5.路由配置:

query 的写法

{
path: '/home',
name: Home,
component: Home
}

params写法:

{
path: '/home/:site/:bu',
name: Home,
component: Home
}

如果路由上面不写参数,也是可以传过去的,但不会在url上面显示出你的参数,并且当你跳到别的页面或者刷新页面的时候参数会丢失,那依赖这个参数的http请求或者其他操作就会失败

6,获取路由参数

在接收的跳转的页面

created () {
let self = this
self.getParams()
},
watch () {
'$route': 'getParams'
},
methods: {
  getParams () {
  let site = this.$route.query.site
  let bu = this.$route.query.bu
  // 如果是params 传参,那就是this.$route.params.site
  上面就可以获取到传递的参数了
 }
}

注意:获取路由上面的参数,用的是$route,后面没有r

params是路由的一部分,必须要有。query是拼接在url后面的参数,没有也没关系。

params一旦设置在路由,params就是路由的一部分,如果这个路由有params传参,但是在跳转的时候没有传这个参数,会导致跳转失败或者页面会没有内容。

params、query不设置也可以传参,但是params不设置的时候,刷新页面或者返回参数会丢失,query并不会出现这种情况,这一点的在上面说过了

路由总结:

路由传递参数和传统传递参数是一样的,命名路由类似表单提交而查询就是url传递,在vue项目中基本上掌握了这两种传递参数就能应付大部分应用了,最后总结为以下:

1.命名路由搭配params,刷新页面参数会丢失

2.查询参数搭配query,刷新页面数据不会丢失

3.接受参数使用this.$router后面就是搭配路由的名称就能获取到参数的值

-----------------------转自简书:_双眸

 

最后总结:

项目做到后期遇到的坑还是挺多的,尤其是配合antdesign的时候,但是我相信熟能生巧,值得反思学习的不是哪一个知识点,知识点固然重要,但最重要的考虑问题,解决问题的思路。加油 ! 越来越好!

 

 

 

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值