Vue的入门学习笔记(一)

Vue.js 官网教程:https://cn.vuejs.org/v2/guide/
B站Vue.js入门教学视频:https://www.bilibili.com/video/BV18E411a7mC?p=6

idea插件的安装

1.Plugins搜索vue 安装即可。
项目如何创建Vue Component组件:

image.png

如果没有Vue Component,设置模板里新增。详细操作可以看:https://blog.csdn.net/jdq8576/article/details/104055707/
image.png

CDN的方式引入Vue.js

完整版:<script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script>
简版:<script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.min.js"></script>

cdn如何引入vue.js详细介绍:https://blog.csdn.net/Mrs_chens/article/details/103295707

Vue基本语法

vue的7个属性
el属性
用来指示vue编译器从什么地方开始解析 vue的语法,可以说是一个占位符。
data属性
用来组织从view中抽象出来的属性,可以说将视图的数据抽象出来存放在data中。
template属性
用来设置模板,会替换页面元素,包括占位符。
methods属性
放置页面中的业务逻辑,js方法一般都放置在methods中
render属性
创建真正的Virtual Dom
computed属性
用来计算
watch属性
watch:function(new,old){}
监听data中数据的变化
两个参数,一个返回新值,一个返回旧值,

  1. if 和 for 的使用
<!DOCTYPE html>
<html lang="en" xmlns:v-bind="http://www.w3.org/1999/xhtml" >
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<!--view层 模板-->
<div id="app">
<!-- 取值方式1-->
    {{message}}
    <br>

<!--2.绑定的方式-->
    <span v-bind:title="message">
        悬停绑定信息
    </span>

<!-- if else-->
    <h1 v-if="ok">Yes</h1>
    <h1 v-else>No</h1>

<!-- if elseif elseif-->
    <h1 v-if="type==='A'">A</h1>
    <h1 v-else-if="type==='B'">B</h1>
    <h1 v-else-if="type==='C'">C</h1>
    <h1 v-else>Z</h1>

<!--for循环  以及index 下标用法-->
    <li v-for="item in items">
        {{item.message}}
    </li>
    <li v-for="(item,index) in items">
        {{item.message}}---{{index}}
    </li>
</div>

<!--导入Vue.js-->
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.min.js"></script>
<script>
    var vm = new Vue({
       el: "#app",
        // Model:数据
       data:{
           message: "Hello Vue!",
           ok: true,
           type: 'A',
           items: [
               {message: "参数1"},
               {message: "参数2"},
               {message: "参数3"}
           ]
       }
    });
</script>
</body>
</html>
image.png

v-bind: 可以简写为 :
v-on:click可以简写为 @click

  1. 绑定事件
<!DOCTYPE html>
<html lang="en" xmlns:v-on="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<!--view层 模板-->
<div id="app">

    <button v-on:click="say">click</button>

</div>

<!--导入Vue.js-->
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.min.js"></script>
<script>
    var vm = new Vue({
       el: "#app",
        // Model:数据
       data:{
           message: "Hello Vue!"
       },
        // 方法必须定义在Vue的Methods对象中, 用 v-on: 事件调用
        methods: {
           say: function () {
                alert(this.message);
           }
        }
    });
</script>
</body>
</html>
  1. 双向绑定
<!DOCTYPE html>
<html lang="en" xmlns:v-on="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<!--view层 模板-->
<div id="app">

    输入文本:<input type="text" v-model="message">{{message}}
    <br>

    性别:    <input type="radio" name="sex" value="男" v-model="testradio">男
            <input type="radio" name="sex" value="女" v-model="testradio">女
    选中了:{{testradio}}
    <br>

    <select name="" id=""  v-model="testselect">
        <option value="" disabled>--请选择--</option>
        <option value="A">A</option>
        <option value="B">B</option>
        <option value="C">C</option>
    </select>
    选中了:{{testselect}}

</div>

<!--导入Vue.js-->
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.min.js"></script>
<script>
    var vm = new Vue({
       el: "#app",
       data:{
           message: "123",
           testradio: '',
           testselect:''
       }
    });
</script>
</body>
</html>
image.png
  1. Vue组件
    Vue组件的官网详细介绍:https://cn.vuejs.org/v2/guide/components-registration.html
    Prop属性的详细介绍:https://cn.vuejs.org/v2/guide/components-props.html
<!DOCTYPE html>
<html lang="en" xmlns:v-on="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<div id="app">

    <!--组件:传递给组件中的值: props-->
    <testcomponet v-for="item in items" v-bind:salt="item"></testcomponet>

</div>

<!--导入Vue.js-->
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.min.js"></script>
<script>
    // 定义一个Vue组component, 第一个参数为自定义的组件名称
    Vue.component("testcomponet",{
        // props属性 用来传递参数(这里是v-bind绑定的数据),自定义绑定名称
        props: ['salt'],
        template: '<li>{{salt}}</li>'
    });

    var vm = new Vue({
       el: "#app",
       data:{
           items: ["java","vue","react"]
       }
    });
</script>
</body>
</html>
image.png
  1. 计算属性
    计算属性的主要特性就是为了将不经常变化的计算结果进行缓存,以节约系统开销.
    官网关于计算属性的详解:https://cn.vuejs.org/v2/guide/computed.html
<script>
    var vm = new Vue({
        el: "#app",
        // Model:数据
        data:{
            message: "Hello Vue!"
        },
        // 方法必须定义在Vue的Methods对象中, 用 v-on: 事件调用
        methods: {
            currenttime1: function () {
                return Date.now();
            }
        },
        computed: {
            //计算属性 可以想象成缓存,如果里面的值没有变化,下次就可以直接加载.
            currenttime2: function () {
                return Date.now();
            }
        }
    });
</script>
  1. 插槽
    官网介绍:https://cn.vuejs.org/v2/guide/components-slots.html
<!DOCTYPE html>
<html lang="en" xmlns:v-on="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<div id="app">

    <todo>
        <todo-title slot="todo-title" v-bind:title="title"></todo-title>
        <todo-items slot="todo-items" v-for="item in items" :item="item"></todo-items>
    </todo>

</div>

<!--导入Vue.js-->
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.min.js"></script>
<script>
    // slot 插槽
    Vue.component("todo",{
        template: '<div>\
                        <slot name="todo-title"></slot>\
                        <ul>\
                            <slot name="todo-items"></slot>\
                        </ul>\
                       </div>'
    });
    Vue.component("todo-title",{
        props: ['title'],
        template: '<div>{{title}}</div>'
    });
    Vue.component("todo-items",{
        props: ['item'],
        template: '<div>{{item}}</div>'
    });


    var vm = new Vue({
        el: "#app",
        data:{
            title: "参数列表",
            items: ["java","vue","react"]
        }
    });
</script>
</body>
</html>
image.png
  1. 自定义事件:
    关于组件基础官网文档:https://cn.vuejs.org/v2/guide/components.html
    这边有一点需要注意的是,每一个component组件中的data必须是一个函数,互不影响,↑文档中有详细解释.
<!DOCTYPE html>
<html lang="en" xmlns:v-on="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<div id="app">

    <todo>
        <todo-title slot="todo-title" v-bind:title="title"></todo-title>
        <todo-items slot="todo-items" v-for="(item,index) in items" :item="item" :index="index" v-on:remove="removeItems(index)"></todo-items>
    </todo>

</div>

<!--导入Vue.js-->
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.min.js"></script>
<script>
    // slot 插槽
    Vue.component("todo",{
        template: '<div>\
                        <slot name="todo-title"></slot>\
                        <ul>\
                            <slot name="todo-items"></slot>\
                        </ul>\
                       </div>'
    });
    Vue.component("todo-title",{
        props: ['title'],
        template: '<div>{{title}}</div>'
    });
    Vue.component("todo-items",{
        props: ['item','index'],
        template: '<li>{{index}}---{{item}} <button @click="remove">删除</button></li>',
        methods: {
            remove: function (index) {
                this.$emit('remove',index);
            }
        }
    });


    var vm = new Vue({
        el: "#app",
        data:{
            title: "参数列表",
            items: ["java","vue","react"]
        },
        methods: {
            removeItems: function (index) {
                this.items.splice(index,1);//下标1 即为删除当前元素
            }
        }
    });
</script>
</body>
</html>
image.png

vue-axios实现异步通信(等同于ajax)

中文官网:http://www.axios-js.com/zh-cn/docs/vue-axios.html
CDN方式引入Axios:
Axios:<script src="https://unpkg.com/axios/dist/axios.min.js"></script>

<!DOCTYPE html>
<html lang="en" xmlns:v-on="http://www.w3.org/1999/xhtml" xmlns:v-bind="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <title>Title</title>

<!--v-clock解决闪烁问题-->
    <style>
        [v-clock]{
            display: none;
        }
    </style>
</head>
<body>

<div id="app" v-clock>

    <div>{{info.name}}</div>
    <div>{{info.address}}</div>
    <a v-bind:href="info.url">点击</a>

</div>

<!--导入Vue.js-->
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.min.js"></script>
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
<script>

    var vm = new Vue({
       el: "#app",
        //data 属性 :vm
        data(){
           return{
               //请求返回的参数格式,必须和json字符串一样
               info: {
                   name: null,
                   address: null,
                   url: null
               }
           }
        },
       mounted(){
           //钩子函数
           axios.get('../data.json').then(response=>(this.info=response.data));
       }
    });
</script>
</body>
</html>
data.json文件内容
{
  "name": "salt",
  "address": "jianshu",
  "url": "https://www.jianshu.com/u/a8170bf39a33"
}
image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335