Vue  学习第八天

1.

了解了回掉函数的使用,了解了文件的读取,

2.Promise 函数讲解

console.dir(Promise)

//Promise 函数讲解

//1.其是一个构造函数,既然是构造函数,就可以new 一下,然后得到一个实例

//console.dir(Promise) 看一下,

//2.Promise 上有两个函数,第一个是resolve (成功之后的回掉函数) , reject (失败之后的回掉函数)

//3.在Promise 构造函数的Prototype 属性上有一根.then()方法,也就是说只要是Promise 构造的实例,都可以访问这个方法

//4.如果Promise 表示一个异步操作,那么每当我们new 一个Promise 实例,这个实例就表示一个具体的异步操作,

//5.既然Promise 的实例表示一个异步操作,那么久只能有两种状态,

// 5.1 异步执行成功,调用成功的回掉函数,resolve,

//5.2 异步执行失败,调用失败的回掉函数,reject ,

//5.3 由于Promise的实例是一个异步操作,所以内部拿到操作的结果后,无法return 把结果返回给调用者,;

//这个时候室内使用回掉函数的形式,把成功或者失败的结果返回给调用者,

//6.我们可以在new 出来的Promise实例上调用.then()方法,【预先】为这个Promsie 异步操作指定成功和失败的回掉函数,

//.then(resolve,reject)

//注意,这里new 出来的promise ,只是代表形式上的异步操作,

//形式上的异步操作:就是具体执行不清楚,

//var promise = new Promise();

//使用function 执行

// var promise = new Promise(function(){

// //这个function 内部就是执行具体的异步操作,

// });

//每当new 一个Promise 实例的时候,就好立即执行其内部 异步操作中的代码,

//除了创建对象实例以外,内部的也会执行内部代码,

// const fs = require('fs');

// const path = require('path');

// var promise = new Promise(function(){

// fs.readFile('2.txt','utf-8',(err,dataStr)=>{

// if(err) throw err;

// console.log(dataStr);

// });

// })

//改造升级一下,变成调用的形式,按需执行,

const fs = require('fs');

const path = require('path')

function getFileByPath(filePath){

var promise = new Promise(function(){

fs.readFile(filePath,'utf-8',(err,dataStr)=>{

if(err) throw err;

console.log(dataStr);

})

})

}

getFileByPath('2.txt');

3.promise 执行原理分析。

//beta 2.没有数据返回,失败。继续修改。

//使用resolve和reject

const fs = require('fs');

const path = require('path')

function getFileByPath(filePath){//1

var promise = new Promise(function(resolve,reject){//3

fs.readFile(filePath,'utf-8',(err,dataStr)=>{ //7

// if(err) throw err;

// console.log(dataStr);

if(err) return reject(err) //这两个函数没有定义。

resolve(dataStr) //通过function 传过来。

})

})

return promise;//4

}

//谁调用谁指定回掉函数,//5

var p = getFileByPath('2.txt');//2

var result = p.then(function(dataStr){//6

// console.log(dataStr + 'ooo');

return dataStr;

},function(err){

return err;

//console.log(err +'ooo');

})

console.log(result)

4.对异常的处理--单独处理

getFileByPath('11.txt')

.then(function(data){

console.log(data)

//读取文件2

return getFileByPath('2.txt')

},function(err){

console.log('失败了'+err.message);

//return 一个新的 promise ,不影响后续的执行。

return getFileByPath('2.txt')

}).then(function(data){

console.log(data);

//读取文件3

return getFileByPath('3.txt')

}).then(function(data){

console.log(data)

})

//上述一旦有问题,后面的就不会执行了,因为没有指定失败的。

console.log('okokokok');

5.catch统一处理

//在上一个.then() 中返回一个新的promise 实例,可以继续使用下一个.then() 来处理。

//【单独处理异常。】

//读取文件1

// getFileByPath('11.txt')

// .then(function(data){

// console.log(data)

// //读取文件2

// return getFileByPath('2.txt')

// },function(err){

// console.log('失败了'+err.message);

// //return 一个新的 promise ,不影响后续的执行。

// return getFileByPath('2.txt')

// }).then(function(data){

// console.log(data);

// //读取文件3

// return getFileByPath('3.txt')

// }).then(function(data){

// console.log(data)

// })

// //上述一旦有问题,后面的就不会执行了,因为没有指定失败的。

// //因此,需要单独处理,不要影响后续promise的正常执行,需要单独为每个promise ,通过 .then 指定一下失败的回掉。

// console.log('okokokok');

//有这样一个需求,如果某处执行错误,我们是不需要处理err,也不需要执行下面的,那么上述使用异常函数就有问题了,

//【统一处理异常。】

//catch 起到作用了,

getFileByPath('1.txt')

.then(function(data){

console.log(data)

//读取文件2

return getFileByPath('22.txt')

}).then(function(data){

console.log(data);

//读取文件3

return getFileByPath('3.txt')

}).then(function(data){

console.log(data)

}).catch(function(err){

//catch的作用,如果前面有任何的Promise 执行失败了,则立即终止所有的promise,并马上进入catch中执行。

console.log('catch异常处理。'+err.message);

})

console.log('okokokok');

6.项目-改造新闻资讯的路由链接

6.11先改造连接

<router-link to="/home/newslist">

<span class="mui-icon mui-icon-home"></span>

<div class="mui-media-body">新闻咨询</div>

</router-link>

6.2 然后建立相关组件页面。NewsList.vue

<template>

<div>

<h1>这个是新闻列表</h1>

</div>

</template>

<script>

</script>

<style lang="scss" scoped>

</style>

6.3 进行配置,进行相关匹配.在router.js中进行两步配置

6.3.1 导入import NewsList from './components/news/NewsList.vue';

6.3.2 配置{path :'/home/newslist',component :NewsList}

7.NewsList.vue新闻列表的实现。参考MUI中的media-list 实现。

7.1 复制过来,然后进行相关样式修改

8.获取数据

8.1 定义导出数据

export default {

}

8.2定义数据

export default {

data (){

}

}

8.3定义方法

export default {

data (){},

methods :{

}

}

8.4方法内部数据实现

getNewsList(){

this.$http.get('xxxx').then(result =>{  //发送请求

if(result.body.status == 0){

//成功--想要弹窗

//对数据进行存储接收

}else{

//失败

}

});

}

其中相关的步骤就是发送http请求,对相关状态进行判断,获得数据进行存储,

8.5 内部的数据展示,通过v-for 实现,

【新闻页面的整体流程实现】

1.NewsList.vue 的实现

2. 相关路由连接的配置实现

3.数据的获取。先检查main.js是否安装了【vue-resource】插件。

4.数据渲染,v-for 循环展示

【特别注意一个插件】。vue-resource是Vue.js的一款插件,它可以通过XMLHttpRequest或JSONP发起请求并处理响应。也就是说,$.ajax能做的事情,vue-resource插件一样也能做到,而且vue-resource的API更为简洁。另外,vue-resource还提供了非常有用的inteceptor功能,使用inteceptor可以在请求前和请求后附加一些行为,比如使用inteceptor在ajax请求时显示loading界面。

【模板整理如下】

<template>

<div>

<ul class="mui-table-view"><!--1. 做好组件页面-->

<!-- 3. 将拿到的数据做渲染-->

<li class="mui-table-view-cell mui-media" v-for="item in newslist" :key="item.id">

<a href="javascript:;">

<img class="mui-media-object mui-pull-left" src="https://images.gitee.com/uploads/34/2037534_liusongjie-1.png?1531054435">

<div class="mui-media-body">

<h1>幸福</h1>

<p class='mui-ellipsis'>

<span>发表时间:2018-07-11 10:56</span>

<span>5次</span>

</p>

</div>

</a>

</li>

</ul>

</div>

</template>

<script>

import {Toast} from 'mint-ui'

export default {

data (){

return {

newslist : []

}

},

created () {

this.getNewsList();

},

methods :{

getNewsList(){ //2.拿数据---

this.$http.get('xxxx').then(result =>{

if(result.body.status == 0){

//成功--保存数据到列表上

this.newslist = result.body.message;

}else{

//失败---想要弹窗

Toast('获取新闻数据失败');

}

});

}

}

}

</script>

<style lang="scss" scoped>

.mui-table-view{

li{

h1{

font-size: 14px;

}

.mui-ellipsis{

font-size: 12px;

color: blue;

display: flex;

justify-content: space-between;

}

}

}

</style>

自己模拟的假数据,然后通过v-for 封装进去

this.newslist = [

{'id': '1','title':'幸福','time':'2018-07-11 13:33','clickTotal':'5'},

{'id': '2','title':'快乐','time':'2018-07-11 13:34','clickTotal':'0'},

{'id': '3','title':'吉祥','time':'2018-07-11 13:38','clickTotal':'15'}

// ['1','11','1','1'],

// ['2','11','22','21'],

// ['12','11','212','221']

];

9. 具体新闻内容的实现。

##实现新闻详情列表的开发,

1.把列表中的每一项改造为router-link.同时,在跳转d时候应该提供唯一的Id标识符,

2.创建一个新闻详情的组件页面,NewsInfo.vue

3.在路由模块中,将 新闻详情的 路由地址 和 组件页面 对应起来,

9.1 id 传过去时的组装:to="'/home/newsinfo/'+item.id"

<router-link :to="'/home/newsinfo/'+item.id">

<img class="mui-media-object mui-pull-left" src="https://images.gitee.com/uploads/34/2037534_liusongjie-1.png?1531054435">

<div class="mui-media-body">

<h1>{{item.title}}</h1>

<p class='mui-ellipsis'>

<span>发表时间:{{item.time}}</span>

<span>{{item.clickTotal}}次</span>

</p>

</div>

</router-link>

9.2 创建页面 NewsInfo.vue,然后在route.js 中进行配置。基本的框架就行,暂时不实现特效。

<template>

<div>

<h1>新闻详情-</h1>

</div>

</template>

<script>

</script>

<style lang="scss" scoped>

</style>

9.3根据请求,来到指定的页面,然后展示指定的数据。前提是要得到指定的id号,那么渲染页面内容的id号则需要得到,

【获取id】的两种方式。

1.???带问号的,就是使用this.$route.query(‘id’)

2./id/name/这种形式的,就是使用this.$route.params.id 来获取。

<template>

<div>

<h1>新闻详情--{{id}}</h1>

<!--拿到ID 的方式

1. http://localhost:3000/#/home/newsinfo/1 这种使用 parmas 来接收或者this.$route.params里面取

2.http://localhost:3000/#/home/newsinfo/?username=

用vue router的时候可以直接从this.$route.query

-->

</div>

</template>

<script>

export default {

data (){

return {

id: this.$route.params.id, //将url 地址中传递过来的id 值,

}

}

}

</script>

<style lang="scss" scoped>

</style>

总结:此处三个重要的点

1.<router-link :to="'/home/newsinfotest/'+ item.id">

router-link的组装形式

2.{path : '/home/newsinfo/:id',component : newsinfo},

route.js 中的path匹配规则

3.<h1>test info---{{$route.params.id}}</h1>

组件页面拿内容的形式

4.尝试加一个参数--success

答:

route.js 中这样封装。

{path : '/home/newsinfo/:id:title',component : newsinfo},

路由连接中这样封装

<router-link :to=”’/home/newsinfo/’+item.id+item.title”>

在数据获取中id: this.$route.params.id, //将url 地址中传递过来的id 值,

title : this.$route.params.title //标题

10.实现新闻详情页面的页面布局和数据渲染,

1.页面布局

2.数据渲染。真实情况是到数据库拿,我的是模拟的json 对象数据

11.绘制评论子组件

1.创建子组件,comment.vue

2.把子组件放到页面中去,NewsInfo.vue 中,就是实现挂载。

2.1 先倒入子组件,import comment from ‘../subcomponents/comment.vue’

2.2 挂载到父组件的 components :{ } 中,使其成为自己的子组件

components:{

'comment-box' : comment //2.

}

2.3 注册完毕以后,以标签的形式使用即可,

<comment-box></comment-box>

2.4 发表评论和加载更多按钮。

【按需倒入组件】

import {Header,Swipe, SwipeItem,Button} from 'mint-ui'

Vue.component(Button.name, Button);

【添加】

<mt-button type="primary" size="large">发表评论</mt-button>

<mt-button type="danger" size="large">加载更多</mt-button>

2.5 初始化加载评论数据

根据这个新闻内容的ID 获取评论数据,那么父组件就要向子组件传值

<comment-box :id="this.id"></comment-box>

子组件接收,就需要使用props :[] 属性

Vue 学习第八天相关推荐

  1. vue学习第八天——组件基础

    基本示例(官网找去) 因为组件是可复用的 Vue 实例,所以它们与 new Vue 接收相同的选项,例如 data.computed.watch.methods 以及生命周期钩子等.仅有的例外是像 e ...

  2. 前端Vue学习之路(二)-Vue-router路由

    Vue学习之路 (二) Vue-router(基础版) 一.增加静态路由 二.动态路由+路由嵌套+404页面 三. 编程式导航 四.命名路由 五.命名视图 六.重定向和起别名 1.重定向 2.起别名 ...

  3. 前端Vue学习之路(一)-初识Vue

    Vue学习之路 (一) 1.引言 2.更换npm国内镜像源 3.用npm下载Vue 4.Vue全家桶 5.使用命令创建项目 5.推荐插件 6.推荐网站 7.学习扩展 1.引言 先安装node.js环境 ...

  4. 菜鸟Vue学习笔记(三)

    菜鸟Vue学习笔记(三) 本周使用了Vue来操作表单,接下来说下Vue中双向绑定表单元素的用法. Vue中双向绑定是使用的v-model,所谓的双向绑定即改变变量的值,表单元素的值也会改变,同样的,改 ...

  5. 好程序员Web前端教程分享Vue学习心得

    为什么80%的码农都做不了架构师?>>>    好程序员Web前端教程分享Vue学习心得,Vue是一套用于构建用户界面的渐进式框架.与其它大型框架不同的是,Vue 被设计为可以自底向 ...

  6. Vue学习(一)-邂逅Vuejs

    Vue学习(一)- 邂逅Vuejs 零.视频链接 一.邂逅Vuejs 1.认识Vuejs 1.1 为什么学习Vuejs 1.2 简单认识一下Vuejs 2.Vuejs安装方式 2.1 CDN引入 2. ...

  7. Vue 学习 第六天学习笔记

    Vue 学习 第六天学习笔记 1.webpack  使用复习 第一步:先建立文件夹. 第二步,用webpack将其初始化,建立管理.npm 的包管理工具管理起来, npm init -y  .注意{查 ...

  8. Vue 学习第五天 学习笔记

    Vue   学习第五天 1. keyup事件 <div id="app"> <input type="text" v-model=" ...

  9. Vue 学习第四天--第一部分 --盲点整理与昨天知识回顾

    Vue   学习第四天--第一部分 1.父组件向子组件传值 v-bind:临时变量名="父组件变量名" v-bind:value="fathervalue" 子 ...

最新文章

  1. Objective C浅拷贝和深拷贝
  2. POJ-1273(最大流-Augment Path,EK,BFS)
  3. windows下安装mysql以及解决(MySQL 服务正在启动 . MySQL 服务无法启动。服务没有报告任何错误。)...
  4. 好友圈的场景有哪些特点,该如何设计?
  5. URL2Video:把网页自动创建为短视频
  6. 常用的寄存器( bss段的作用)
  7. emmap erlang_erLang学些笔记2—基本类型
  8. Ubuntu18.04安装Gstreamer1.0(六)
  9. 图解设计模式-State模式
  10. word插入脚注后最后一页多了一个分页符(下一页),导致最后多了一个空白页,删除不掉。
  11. 三菱FX系列PLC辅助继电器(M)
  12. python画图网格线设置_matplotlib之极坐标系的极径网格线(rgrids)的显示刻度
  13. 如何无损把flac格式转换成mp3?将flac转mp3的技巧
  14. NLP面试题目汇总11-15
  15. 美国老太Sylvia
  16. 计算机flash ram是什么意思,ROM、RAM、CPU、CACHE、FLASH的区别
  17. TOLT(you only look twice): Rapid multi-scale object detection in satellite imagery(中文翻译simrdwn)
  18. 海外云主机的选择要注意什么?
  19. 20P76 pr预设模板850个缩放炫光毛刺干扰透视平移无缝视频转场
  20. 双评价-土地资源评价流程

热门文章

  1. php get 返回源码,php源码 fsockopen获取网页内容实例详解
  2. 计算机网络与通信基础知识,计算机网络与通信基础/谢雨飞
  3. a标签hidden属性_HTML5属性a标签ping被用于DDOS攻击,QQ浏览器被波及
  4. 雷达波形样式_案例分析 | 基于XSIM的雷达电子对抗仿真
  5. python 线程同步_Python并发编程-线程同步(线程安全)
  6. 建智能工厂,可从这6个方面着手!
  7. session过期情况下ajax请求不会触发重新登录的问题
  8. 运维人员究竟如何提升价值,持续获得高薪?
  9. Underscore.js 初探
  10. 不同局域网内经Internet的P2P通信技术总结