Vue学习笔记


Vue学习笔记

一、环境搭建

1、安装VS code

2、安装live server

3、安装科学上网工具

4、安装谷歌浏览器

5、安装Vue浏览器调试工具

二、安装Vue(两种版本)

1、导入开发版本的Vue.js

<!-- 开发环境版本,包含了有帮助的命令行警告 -->

<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>

<!-- 生产环境版本,优化了尺寸和速度 -->

<script src="https://cdn.jsdelivr.net/npm/vue@2"></script>

2、创建Vue实例对象,设置el属性和data属性

<script>

        var app = new Vue({

            el:"#app",

            data:{

                message:"Hello Vue!"

            }

        })

    </script>

3、使用简洁的模板语法把数据渲染到页面上

    <div id="app">

        {{ message }}

    </div>

三、el挂载点

el挂载点的作用是什么?

el是用来设置Vue实例挂载(管理)的元素

Vue实例的作用范围是什么?

Vue会管理el选项命中元素及其内部的后代元素

是否可以使用其他的选择器?

可以使用其他的选择器,但是建议使用ID选择器

是否可以设置其他的dom元素呢?

可以使用其他的双标签,不能使用HTML和BODY

四、data: 数据对象

Vue中用到的数据定义在data中

data中可以写复杂类型数据

渲染复杂类型数据时,遵守js的语法即可

   <div id="app">

        {{ message }}

        <h2>{{ school.name }}  {{ school.mobile }}</h2>

        <ul>

            <li>{{ campus[0] }}</li>

            <li>{{ campus[1] }}</li>

            <li>{{ campus[2] }}</li>

        </ul>

     </div>

 <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>

    <script>

        var app = new Vue({

            el:"#app",

            data:{

                message:"Hello Vue!",

                school:{

                    name:"许多",

                    mobile:"19800000000"

                },

                campus:["北京","上海","深圳"]

            }

        })

    </script>

Hello Vue!

许多 19800000000

北京

上海

深圳

五、指令

1、内容绑定,事件绑定

v-text   v-html   v-on基础

2、显示切换,属性绑定

v-show   v-if   v-bind

3、列表循环,表单元素绑定

v-for    v-on补充   v-model

v-text  设置标签的文本值(textContent)

<body>

    <div id="app">

        <h2 v-text="message">北京</h2>

        <h2 v-text="info">上海</h2>

        <h2>{{message + "?"}}上海</h2>

    </div>

    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>

    <script>

        var app = new Vue({

            el:"#app",

            data:{

                message:"Hello Word!!!!",

                info:"hahaha"

            }

        })

</script>

</body>

Hello Word!!!!

hahaha

Hello Word!!!!?上海

v-html 设置标签的innerHTML

<body>

    <div id="app">

        <p v-html="content"></p>

        <p v-text="content"></p>

    </div>

 <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>

    <script>

        var app = new Vue({

            el:"#app",

            data:{

                content:"Hello Word!!!!",

                content:"<a href='http://www.hao123.com'>hao123<a/>"

            }

        })

    </script>

</body>

hao123

<a href='http://www.hao123.com'>hao123<a/>

v-on基础 为元素绑定事件

<body>

    <div id="app">

        <input type="button" value="v-on指令" v-on:click="doIt">

        <input type="button" value="v-on指令" @click="doIt">

        <input type="button" value="双击指令" @dblclick="doIt">

        <h2 @click="changeFood">{{ food }}</h2>

    </div>

 <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>

    <script>

        var app = new Vue({

            el:"#app",

            data:{

                food:"Hello Wold"

            },

            methods:{

                doIt:function(){

                    alert("做It")

                },

                changeFood:function(){

                    this.food +="你好!"

                }

            },

        })

    </script> 

</body>

1、v-on指令的作用是:微元素绑定事件

2、事件名称不需要写on

3、指令可以简写为@

4、绑定的方法定义在methods属性中

计数器案例

<body>

    <div id="app">

        <button @click="sub">

            -

        </button>

        <span> {{ num }}</span>

        <button @click="add">

            +

        </button>

    </div>

 <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>

    <script>

        var app = new Vue({

            el:"#app",

            data:{

                num:1

            },

            methods:{

                add:function(){

                    if(this.num<10){

                        this.num++;

                    }else{

                        alert('别点了')

                    }

                },

                sub:function(){

                    if(this.num>0){

                        this.num--;

                    }else{

                        alert('别点了');

                    }

                }

            }


        })

    </script>

</body>

创建Vue示例时:el(挂载点),data(数据),methods(方法)

v-on指令的作用是绑定事件,简写为@

方法中通过this,关键字获取data中的数据

v-text指令的作用是:设置元素的文本值,简写为{{}}

v-show 根据表达值的真假,切换元素的显示和隐藏

<body>

    <div id="app">

        <input type="button" value="切换显示器" @click="changeIsShow">

        <input type="button" value="累加年龄" @click="addAge">

        <img v-show="isShow" src="https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png" alt="">

        <img v-show="age>=18" src="https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png" alt="">

    </div>

    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>

    <script>

        var app = new Vue({

            el:"#app",

            data:{

                isShow:false,

                age:17

            },

            methods:{

                changeIsShow:function(){

                    this.isShow = !this.isShow;

                },

                addAge:function(){

                    this.age++;

                }

            }

        })

    </script>

</body>

1、v-show指令的作用是:根据真假切换元素的显示状态

2、原理是修改元素的display,实现显示隐藏

3、指令后面的内容,最终都会解析为布尔值

4、值为true元素显示,值为false元素隐藏

5、数据改变时,会同步更新

v-if 根据表达值的真假,切换元素的显示和隐藏(操纵dom元素)

<body>

    <div id="app">

        <input type="button" value="切换显示" @click="toggleIsShow">

        <p v-if="isShow">Hello Word v-if</p>

        <p v-show="isShow">Hello Word v-show</p>

        <h2 v-if="temperature>=35">惹</h2>

    </div>

    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>

    <script>

        var app = new Vue({

            el:"#app",

            data:{

                isShow:false,

                temperature:20,

            },

            methods:{

                toggleIsShow:function(){

                    this.isShow = !this.isShow;

                }

            },

        })

    </script>

</body>

1、v-if指令的作用是:根据表达式的真假切换元素的显示状态

2、本质是通过操纵dom元素来切换元素的显示状态

3、表达式的值为true,元素存在于dom树中,为false,从dom树中移除

4、频繁的切换v-show,反之使用v-if,前者的切换消耗小

v-bind设置元素的属性(比如:src,title,class)

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <meta http-equiv="X-UA-Compatible" content="IE=edge">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>v-bind</title>

    <style>

        .active{

            border: 1px solid red;

        }

    </style>

</head>

<body>

    <div id="app">

        <img v-bind:src="imgSrc" alt="">

        <br>

        <img :src="imgSrc" alt="" :title="imgTitle+'!!!'" :class="isActive?'active':''" @click="toggleActive">

        <br>

        <img :src="imgSrc" alt="" :title="imgTitle+'!!!'" :class="{active:isActive}" @click="toggleActive">

    </div>

    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>

    <script>

        var app = new Vue({

            el:"#app",

            data:{

                imgSrc:"https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png",

                imgTitle:"Hello Word",

                isActive:false

            },

            methods:{

                toggleActive:function(){

                    this.isActive = !this.isActive;

                }

            }

        })

    </script>

</body>

</html>

1、v-bind指令的作用是:为元素绑定属性

2、完整写法是v-bind:属性名

3、简写的话可以直接省略v-bind,只保留:属性名

图片切换

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <meta http-equiv="X-UA-Compatible" content="IE=edge">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>v-bind</title>

</head>

<body>

    <div id="app">

        <img :src="imgArr[index]" alt="">

        <a href="javascript:void(0)" v-if="index!=0" @click="prev">←</a>

        <a href="javascript:void(0)" v-show="index!=2" @click="next">→</a>

    </div>

    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>

    <script>

        var app = new Vue({

            el:"#app",

            data:{

                imgArr:[

                    "../css/11.png",

                    "../css/22.png",

                    "../css/33.png",

                ],

                index:0,

            },

            methods:{

                prev:function(){

                    this.index--;

                },

                next:function(){

                    this.index++;

                }

            }

        })

    </script>

</body>

</html>

1、列表数据使用数组保存

2、v-bind指令可以设置元素属性,比如src

3、v-show和v-if都可以切换元素的显示状态,频繁切换使用v-show

v-for 根据数据生成列表结构

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <meta http-equiv="X-UA-Compatible" content="IE=edge">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>v-for</title>

</head>

<body>

    <div id="app">

        <input type="button" value="添加数据" @click="add">

        <input type="button" value="移除数据" @click="remove">

        <ul>

            <li v-for="(item,index) in arr">

                {{index+1}} {{item}}

            </li>

        </ul>

        <h2 v-for="item in vegetables" v-bind:title="item.name">

            {{ item.name}}

        </h2>

    </div>

    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>

    <script>

        var app = new Vue({

            el:"#app",

            data:{

                arr:["北京","上海","广州"],

                vegetables:[

                    {name:"西红柿"},

                    {name:"西兰花"},

                    {name:"西葫芦"},

                ]

            },

            methods:{

                add:function(){

                    this.vegetables.push({name:"西瓜"})

                },

                remove:function(){

                    this.vegetables.shift();

                }

            }

        })

    </script>

</body>

</html>

1、v-for指令的作用是:根据数据生成列表结构

2、数据经常和v-for结合使用

3、语法是(item,index) in 数据

4、Item和index可以结合其他指令一起使用

5、数组长度的更新会同步到页面上,是响应式的

v-on补充 传递自定义参数,事件修饰符

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <meta http-equiv="X-UA-Compatible" content="IE=edge">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>v-on补充</title>

</head>

<body>

    <div id="app">

        <input type="button" value="点击" @click="doIt(666,'老铁')">

        <input type="text" @keyup.enter="sayHi">

    </div>

    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>

    <script>

        var app = new Vue({

            el:"#app",

            methods:{

                doIt:function(p1,p2){

                    console.log("doIt");

                    console.log(p1);

                    console.log(p2);

                },

                sayHi:function(){

                    alert("Hello Word");

                }

            }

        })

    </script>

</body>

</html>

1、事件绑定的方法写成函数调用的形式,可以传入自定义参数

2、定义方法时需要定义形参来接受传入的实参

3、事件的后面跟上.修饰符可以对事件进行限制

4、.enter可以限制出发的案件为回车

v-model 获取和设置表单元素的值(双向数据绑定)

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <meta http-equiv="X-UA-Compatible" content="IE=edge">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>v-model</title>

</head>

<body>

    <div id="app">

        <input type="button" value="修改message" @click="setM">

        <input type="text" v-model="message" @keyup.enter="getM">

        <h2 v-text="message"></h2>

    </div>

 <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>

    <script>

        var app = new Vue({

            el:"#app",

            data:{

                message:"Hello"

            },

            methods:{

                getM:function(){

                    alert(this.message);

                },

                setM:function(){

                    this.message = "你好";

                }

            },

        })

    </script>

</body>

</html>

1、v-model指令的作用是便捷的设置和获取表单元素的值

2、绑定的数据会和表单元素值相关联

3、绑定的数据←→表单元素的值

本地应用:记事本案例

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <meta http-equiv="X-UA-Compatible" content="IE=edge">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>v-model</title>

</head>

<body>

    <!-- 主体区域 -->

    <section id="todoapp"> 

        <!-- 输入框 -->

        <header class="header">

            <h1>记事本</h1>

            <input v-model="inputValue" @keyup.enter="add" autofocus="autofocus" autocomplete="off" placeholder="请输入任务" class="new-todo" />

        </header>

        <!-- 列表区域 -->

        <section class="main">

            <ul class="todo-list">

                <li class="todo" v-for="(item,index) in list">

                    <div class="view">

                        <span class="index">{{index+1}}.</span>

                        <label>{{item}}</label>

                        <button class="destroy" @click="remove(index)"  value="删除"></button>

                    </div>

                </li>

            </ul>

        </section>

        <!-- 统计和清空 -->

        <footer class="footer">

            <span class="todo-count" v-if="list.length!=0"><strong> {{ list.length }} </strong> items left</span>

            <button class="clear-completed" v-show="list.length!=0" @click="clear">clear</button>

        </footer>

    </section>

    <!-- 底部 -->

    <footer class="info">

    </footer>

    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>

    <script>

        var app = new Vue({

            el:"#todoapp",

            data:{

                list:["吃饭","睡觉","学习"],

                inputValue:"哈哈啊哈"

            },

            methods:{

                add:function(){

                    this.list.push(this.inputValue);

                },

                remove:function(index){

                    console.log("删除");

                    console.log(index);

                    this.list.splice(index,1);

                },

                clear:function(){

                    this.list = [];

                }

            }

        })

    </script>

</body>

</html>

一、新增

1.生成列表结构(v-for数组)

2.获取用户数据(v-model)

3.回车,新增数据(v-on  .enter 添加数据)

二、删除

1.点击删除指定内容(v-on splice 索引)

2.数据改变,和数据绑定的元素同步改变

3.事件的自定义参数

4.splice的使用方法

三、统计

1.统计信息个数(v-text length)

2.基于数据的开发方式

四、清空

1.点击清除所有信息(v-on 清空数组)

2.基于数据的开发方式

五、隐藏

1.没有数据时,隐藏元素(v-show v-if 数据非空)

重点内容:

1、列表结构可以通过v-for指令结合数据生成

2、v-on结合事件修饰符可以对事件进行限制,比如.enter

3、v-on在绑定事件时可以传递自定义参数

4、通过v-model可以快速设置和获取表单元素的值

5、基于数据的开发方式


网络应用(天气预报案例)

Vue结合网络数据开发应用

axios 网络请求库

Axios+vue 结合vue一起

Axios 功能强大的网络请求库

Axios基本使用

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <meta http-equiv="X-UA-Compatible" content="IE=edge">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>axios基本使用</title>

</head>

<body>

    <input type="button" value="get请求" class="get">

    <input type="button" value="post请求" class="post">


    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>

    <script src="https://unpkg.com/axios/dist/axios.min.js"></script>

    <script>

        // 接口1:随机笑话

        // 请求地址:https://autumnfish.cn/api/joke/list

        // 请求方法:get

        // 请求参数:num(笑话条数,字数)

        // 响应内容:随机笑话

        document.querySelector(".get").onclick = function(){

            axios.get("https://autumnfish.cn/api/joke/list?num=3")

            .then(function(response){

                console.log(response);

            },function(err){

                console.log(err);

            })

        }

        // 接口:用户注册

        // 请求地址:https://autumnfish.cn/api/user/reg

        // 请求方法:post

        // 请求参数:username(用户名,字符串)

        // 响应内容:注册成功或失败

        document.querySelector(".post").onclick = function(){

            axios.post("https://autumnfish.cn/api/user/reg",{username:"jack"})

            .then(function(response){

                console.log(response);

            },function(err){

                console.log(err);

            })

        }

    </script>

</body>

</html>

1、axios必须先导入才可以使用

2、使用get或post方法即可发送对应的请求

3、then方法中的回掉函数会在请求成功或失败时触发

4、通过回掉函数的形参可以获取相应内容,或错误信息

文档传送门:https://github.com/axios/axios


Axios+vue axios如何结合vue开发网络应用

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <meta http-equiv="X-UA-Compatible" content="IE=edge">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>axios基本使用</title>

</head>

<body>

    <div id="app">

        <input type="button" value="获取笑话" @click="getJoke">

        <p>{{joke}}</p>

    </div>

    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>

    <script src="https://unpkg.com/axios/dist/axios.min.js"></script>

    <script>

        // 接口1:随机笑话

        // 请求地址:https://autumnfish.cn/api/joke

        // 请求方法:get

        // 请求参数:无

        // 响应内容:一条随机笑话

        var app = new Vue({

            el:"#app",

            data:{

                joke:"很好笑的笑话"

            },

            methods:{

                getJoke:function(){

                    var that = this;

                    axios.get("https://autumnfish.cn/api/joke").then(function(response){

                        console.log(response.data);

                        that.joke=response.data;

                    },function(err){

                        console.log(err);

                    })

                }

            }

        })

    </script>

</body>

</html>

1、axios回调函数中的this已经改变,无法访问到data中的数据

2、把this保存起来,毁掉函数中直接使用保存的this即可

3、和本地应用的最大区别就是改变了数据来源

查询天气的应用

1、回车查询

(1)按下回车(v-on .enter)

(2)查询数据(axios接口v-model)

(3)渲染数据(v-for数组that)

接口:

请求地址:https://wthrcdn.etouch.cn/weather_mini

请求方法:get

请求参数:city(查询的城市名)

响应内容:天气内容

CTRL+F  CTRL+V

  // 接口1:天气

        // 请求地址:https://wthrcdn.etouch.cn/weather_mini

        // 请求方法:get

        // 请求参数:city(查询的城市名)

        // 响应内容:天气内容

        // 1点击回车

        // 2查询数据

        // 3渲染数据

结构:

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <meta http-equiv="X-UA-Compatible" content="IE=edge">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>天气</title>

</head>

<body>

    <div class="wrap" id="app">

        <div class="search_form">

            <div class="logo"><img src="" alt="logo"></div>

            <div class="form_group">

                <input type="text" @keyup.enter="searchWeather" v-model="city" class="input_txt" placeholder="请输入查询的天气">

                <button class="input_sub" >

                    搜索

                </button>

            </div>

            <div class="hotkey">

                <a href="javascript:;">北京</a>

                <a href="javascript:;">上海</a>

                <a href="javascript:;">广州</a>

                <a href="javascript:;">深圳</a>

            </div>  

        </div>

        <ul class="weather_list">

            <li v-for="item in weatherList">

                <div class="info_type"><span class="iconfont">{{ item.type}}</span></div>

                <div class="info_temp">

                    <b>{{item.low}}</b>

                    ~

                    <b>{{item.high}}</b>

                </div>

                <div class="info_date"><span>{{item.date}}</span></div>

            </li>

        </ul>

    </div>

    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>

    <script src="https://unpkg.com/axios/dist/axios.min.js"></script>

    <script src="../js/main.js"></script>

</body>

</html>

main.js

        var app = new Vue({

            el:"#app",

            data:{

                city:'',

                weatherList:[]

            },

            methods:{

                searchWeather:function(){

                    var that = this;

                    axios.get('http://wthrcdn.etouch.cn/weather_mini?city='+this.city )

                    .then(function(response){

                        console.log(response.data.data.forecast);

                        that.weatherList = response.data.data.forecast

                    })

                    .catch(function(err){})

                }

            },

        })


综合应用(悦听播放器)

1、歌曲搜索

(1)按下回车(v-on .enter)

(2)查询数据(axios 接口 v-model)

(3)渲染数据(v-for 数组 that)

(4)请求地址:https://autumnfish.cn/search

(5)请求方法:get

(6)请求参数:keywords(查询的关键字)

(7)响应内容:歌曲搜索结果

2、歌曲播放

(1)点击播放(v-on)

(2)歌曲地址获取

(3)歌曲地址获取

(4)请求地址https://autumnfish.cn/song/url

(5)请求方法:get

(6)请求参数:id:(歌曲id)

(7)响应内容:歌曲的url地址

3、歌曲封面

(1)点击播放(增加逻辑)

(2)歌曲封面获取(接口 歌曲id)

(3)歌曲封面设置(v-bind)

(4)请求地址:https://autumnfish.cn/song/detail

(5)请求方法:get

(6)请求参数:ids(歌曲id)

(7)相应内容:歌曲详情,包含封面信息

4、歌曲评论

(1)点击播放(增加逻辑)

(2)歌曲评论获取(接口 歌曲id)

(3)歌曲评论渲染

(4)请求地址:https://autumnfish.cn/comment/hot?type=0

(5)请求方法:get

(6)请求参数:id(歌曲id,type固定为0)

(7)相应内容:歌曲的热门评论

5、播放动画

(1)监听音乐播放(v-on play)

(2)监听音乐暂停(v-on pause)

(3)操纵类名(v-bind 对象)

6、MV播放

(1)mv图标显示(v-if)

(2)Mv地址获取(接口 mvid)

(3)遮罩层(v-show v-on)

(4)Mv地址获取(v-bind)

(5)请求地址:https://autumnfish.cn/mv//url

(6)请求参数:id(mvid,为0说明没有mv)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,002评论 6 509
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,777评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,341评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,085评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,110评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,868评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,528评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,422评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,938评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,067评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,199评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,877评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,540评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,079评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,192评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,514评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,190评论 2 357