vue-resource初体验

这个插件是用于http请求的,类似于jquery的ajax函数,支持多种http方法和jsonp。

下面是resource支持的http方法。

get: {method: ‘GET‘},
save: {method: ‘POST‘},
query: {method: ‘GET‘},
update: {method: ‘PUT‘},
remove: {method: ‘DELETE‘},
delete: {method: ‘DELETE‘}

使用方法

标签引入:

<script src="https://cdn.jsdelivr.net/vue.resource/1.0.3/vue-resource.min.js"></script>

模块引入:

es6:

import Vue from ‘vue‘;import VueResource from ‘vue-resource‘Vue.use(VueResource);

commonjs

var Vue = require(‘vue‘);
var VueResource = require(‘vue-resource‘);

Vue.use(VueResource);

实例化一个resource对象

var resource = this.$resource(‘someItem{/id}‘);

一个例子:

{
  // GET方法请求的url,可以换成jsonp,
  this.$http.get(‘/someUrl‘).then(//在vue实例中使用,也可以全局使用Vue.resource
(response) => {
    // 如果请求成功,调用的回调函数,传入响应的json数据作为参数
  },
 (response) => {
    // 出现错误时调用的回调函数
  });
}

比如要从百度api请求一个天气信息:

 getWeather() { //从百度api获取天气信息
                this.$http.jsonp(this.url)//用jsonp方法
                    .then((response) => { //异步
                        if (response) {
                            console.log(response);
                            this.weatherInfo = response.data.results[0];
                        }
                    },(response){console.log(‘error‘)});

完整代码:

一个bug

在完成todolist(练手的小应用,详情请戳<--)的天气组件时原先的模板中,只有天气组件的模板没有v-if指令(与下面的代码对比一下),这时运行时会出错,原因见下面。

<template>
<ul class=‘weather‘>
  <li><h3 style=‘display:inline; color: #f66‘>{{weatherInfo.currentCity}}</h3>  |  pm2.5-{{weatherInfo.pm25}}</li>
  <li>
    <ul>
      <li v-for="item in weatherInfo.weather_data" class=‘detail‘ @click=‘addClass‘>
        <p title="详情" class=‘date‘>{{item.date.slice(0,10)}}</p>
        <p>
        <img :src="item.dayPictureUrl">
        <img :src="item.nightPictureUrl">
        </p>
        <p>{{item.weather}}</p>
        <p>{{item.wind}}</p>
        <p>{{item.temperature}}</p>
        </li>
    </ul>
  </li>
</ul>
</template>

原因就是服务器返回的数据晚vue渲染组件,虽然在created的钩子函数调用了this.getweather()方法,但是在渲染组件时浏览器还没有接收到返回数据,这时就会由于weatherInfo为null导致渲染失败而报错。解决办法是加入v-if="weatherInfo",如果获取了weatherInfo,则显示组件,否则显示加载的动画。代码如下:

<template>
    <!--显示天气界面-->
<ul class=‘weather‘ v-if="weatherInfo">//这里加入了v-if
  <li><h3 style=‘display:inline; color: #f66‘>{{weatherInfo.currentCity}}</h3>  |  pm2.5-{{weatherInfo.pm25}}</li>
  <li>
    <ul>
      <li v-for="item in weatherInfo.weather_data" class=‘detail‘ @click=‘addClass‘>
        <p title="详情" class=‘date‘>{{item.date.slice(0,10)}}</p>
        <p>
        <img :src="item.dayPictureUrl">
        <img :src="item.nightPictureUrl">
        </p>
        <p>{{item.weather}}</p>
        <p>{{item.wind}}</p>
        <p>{{item.temperature}}</p>
        </li>
    </ul>
  </li>
</ul>
<!--加载动画-->
    <p id="preloader_1" v-else>//没有天气数据就显示加载动画
            <span></span>
            <span></span>
            <span></span>
            <span></span>
            <span></span>
    </p>
</template>

<script>
    export default {
        data() {
            return {
                url: ‘http://api.map.baidu.com/telematics/v3/weather?location=上海&output=json&ak=HGOUnCXeQLEeywhGOu2jU29PFdC6duFF‘,
                weatherInfo: null,
                timer: null
            }
        },
        created() { //钩子函数,组件创建完成时调用getWeather方法获取天气信息
            this.getWeather();

        },
        methods: {
            getWeather() { //从百度api获取天气信息
                this.$http.jsonp(this.url)
                    .then((response) => { //异步
                        if (response) {
                            console.log(response);
                            this.weatherInfo = response.data.results[0];
                        } else { //没有响应就再发起一次
                            console.error(‘agian‘);
                            this.getWeather();
                        }
                    });
            },
            addClass(e) { //通过这个方法完成天气信息的显示和隐藏。
                if (e.currentTarget.nodeName == ‘LI‘) {
                    var li = e.currentTarget;
                    if (!/show/.test(li.className)) {
                        li.className += ‘ show‘;
                    } else {
                        li.className = li.className.replace(‘ show‘, ‘‘);
                    }
                }

            }

        }
    }
</script>

one more thing,除了写请求成功的回调函数外,还应该写上请求失败的回调函数。这样程序才健壮。

时间: 2024-08-09 16:39:53

vue-resource初体验的相关文章

vue.js 初体验

Vue.js是什么? 一个构建数据驱动的web界面的库.他不是一个全能框架,技术上重点集中在MVVM中的ViewModel层. Vue.js特点? 轻巧.高性能.可组件化 官网地址:http://cn.vuejs.org/ Vue.js初体验 引入Vue.js独立版本, 至官网下载独立版本.根据提示,开发时选择开发版本. 直接引入Vue.js到静态页面中,从数据绑定开始编写DOM部分和js部分 <div id="app"> {{message}} </div>

vue.js 初体验— Chrome 插件开发实录

欢迎大家关注腾讯云技术社区-博客园官方主页,我们将持续在博客园为大家推荐技术精品文章哦~ 作者:陈纬杰 背景 对于经常和动画开发打交道的开发者对于Animate.css这个动画库不会陌生,它把一些常见的动画效果都封装起来了,非常实用.但是有时候在开发中,仅仅只是需要某一两个动画效果,把整个CSS文件都引入,这样不是太好. 需求就出现了,能不能有一个工具可以直接预览Animate.css对应的动画效果,并且生成对应的动画代码呢? 作为一个UI开发,平时跟Chrome浏览器打交道最多,于是就整了一个

MVC + Vue.js 初体验(实现表单操作)

Vuejs http://cn.vuejs.org/ Vue.js(读音 /vju?/, 类似于 view) 是一套构建用户界面的 渐进式框架.与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计.Vue 的核心库只关注视图层,并且非常容易学习,非常容易与其它库或已有项目整合.另一方面,Vue 完全有能力驱动采用单文件组件和Vue生态系统支持的库开发的复杂单页应用. Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件. DEMO效果 前端源码 @{ Lay

【腾讯Bugly干货分享】基于 Webpack &amp; Vue &amp; Vue-Router 的 SPA 初体验

本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57d13a57132ff21c38110186 导语 最近这几年的前端圈子,由于戏台一般精彩纷呈,从 MVC 到 MVVM,你刚唱罢我登场. backbone,angularjs 已成昨日黄花,reactjs 如日中天,同时另一更轻量的 vue 发展势头更猛,尤其是即将 release 的2.0版本,号称兼具了 angularjs 和 reactjs 的两者优点.不过现在的官方

ArcGis SOE(server object extensions)之REST Template初体验

一.安装vs和arcgis server for .net(本例是vs2010.as 10),然后打开vs新建一个项目 二.项目创建成功后(本例项目名称是GetArea),打开.cs文件. 三.接口方法说明 private RestResource CreateRestSchema() { RestResource rootRes = new RestResource(soe_name, false, RootResHandler); RestOperation sampleOper = new

JMS服务器ActiveMQ的初体验并持久化消息到MySQL数据库中

JMS服务器ActiveMQ的初体验并持久化消息到MySQL数据库中 一.JMS的理解JMS(Java Message Service)是jcp组织02-03年定义了jsr914规范(http://jcp.org/en/jsr/detail?id=914),它定义了消息的格式和消息传递模式:消息包括:消息头,消息扩展属性和消息体,其结构看起来与SOAP非常的相似,但一般情况下,SOAP主要关注远程服务调用,而消息则专注于信息的交换:消息分为:消息生产者,消息服务器和消息消费者.生产者与消费者之间

Node.js 网页瘸腿爬虫初体验

延续上一篇,想把自己博客的文档标题利用Node.js的request全提取出来,于是有了下面的初哥爬虫,水平有限,这只爬虫目前还有点瘸腿,请看官你指正了. // 内置http模块,提供了http服务器和客户端功能 var http=require("http"); // 内置文件处理模块 var fs=require('fs'); // 创建一个将流数据写入文件的WriteStream对象 var outstream=fs.createWriteStream('./1.txt'); /

路由初体验02

1. 路由参数 1.1  给路由添加参数的方法 :参数名 (方法名可以自定义). 在HTML中获取路由的参数使用:$route.params.参数名:在JS中获取路由参数通过 this.$route.params.参数名 实例代码如下: 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <meta name="

Docker深入浅出系列 | 容器初体验

Docker深入浅出系列 | 容器初体验 教程目标 Docker已经上市很多年,不是什么新鲜事物了,很多企业或者开发同学以前也不多不少有所接触,但是有实操经验的人不多,本系列教程主要偏重实战,尽量讲干货,会根据本人理解去做阐述,具体官方概念可以查阅官方文档,本章目标如下: 了解什么是Docker 了解Docker解决了什么 了解什么是镜像和容器 了解容器与虚拟机的区别 了解Vagrant与Docker的区别 了解Docker引擎和架构 了解Docker的镜像分层 了解VirturalBox和Do