前端框架Vue学习

学习网址:

Vue.js 安装 | 菜鸟教程

介绍 — Vue.js

Webpack 入门教程 | 菜鸟教程

使用npm包管理器创建Vue项目

# 全局安装 vue-cli

npm install -g @vue/cli-init

# 创建一个基于 webpack 模板的新项目

vue init webpack my-project

# 这里需要进行一些配置,默认回车即可

? Project name my-project
? Project description (A Vue.js project) in 17.819s
? Project name my-project
? Project description A Vue.js project
? Author balabala
? Vue build standalone
? Install vue-router? Yes
? Use ESLint to lint your code? Yes
? Pick an ESLint preset Standard
? Set up unit tests Yes
? Pick a test runner jest
? Setup e2e tests with Nightwatch? Yes
? Should we run `npm install` for you after the project has been created? (recommended) npm

vue-cli · Generated "my-project".

Running eslint --fix to comply with chosen preset rules...
# ========================


> my-project@1.0.0 lint D:\Vue项目\my-project\my-project
> eslint --ext .js,.vue src test/unit test/e2e/specs "--fix"


# Project initialization finished!
# ========================

To get started:

  cd my-project
  npm run dev

Documentation can be found at https://vuejs-templates.github.io/webpack

使用命令vue ui创建项目(这个得Vue3.0版本以上)

vue ui

第一个Vue程序

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

<!-- 开发环境版本,包含了有帮助的命令行警告 -->
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>

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

var app = new Vue({
            el: "#app",
            data: {
                message: "Hello Vue!"
            }
        })

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

<div id="app">
        {{message}}
    </div>

运行:

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

Vue实例的作用范围:Vue会管理el选项命中的元素及其内部的后代元素

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

可以设置其他的dom元素?可以使用其他的双标签,不能使用HTML和BODY

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

data中可以写复杂类型的数据

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

一、内容绑定,时间绑定

v-text:设置标签的文本值;默认写法会替换全部内容,使用差值表达式{{}}可以替换指定内容;内部支持写表达式。

<div id="app">
        <p v-text="message+'!'"></p>
        <p>上海{{message}}</p>
    </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!"
            }
        })
    </script>

v-html:设置元素的innerHTML;内容中有html结构会被解析为标签;

v-text指令无论内容是什么,只会解析为文本

解析文本使用v-text,需要解析html结构使用v-html

v-on基础:为元素绑定事件;事件名不需要写on指令可以简写为@绑定的方法定义在methods属性中方法内部通过this关键字可以访问 定义在data中的数据

<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">
        <div @click="changeFood">{{message}}</div>
    </div>

    <!-- 开发环境版本,包含了有帮助的命令行警告 -->
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
    <script>
        var app = new Vue({
            el: "#app",
            data: {
                message: "西红柿炒鸡蛋"
            },
            methods: {
                doIt: function () {
                    alert("做IT");
                },
                changeFood: function () {
                    this.message += '很好吃';
                }
            }
        })
    </script>
</body>

 

小案例:

计数器,设计一个计数器,当鼠标点击右键时增加1,点击右键时减1,初始值0,最小值是0

<body>
    <div id="app">
        <div class="input-num">
            <button @click="sub">-</button>
            <span>{{num}}</span>
            <button @click="add">+</button>
        </div>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
    <script>
        var app = new Vue({
            el: "#app",
            data: {
                num: 0
            },
            methods: {
                add: function () {
                    this.num++;
                },
                sub: function () {
                    if (this.num > 0)
                        this.num--;
                }
            }
        })
    </script>
</body>

 

小结:

  • 创建Vue示例时:el(挂载点),data(数据),methods(方法)
  • v-on指令的作用是绑定事件,简写为@
  • 方法中通过this关键字获取data中的数据
  • v-text指令的作用的:设置元素的文本值,简写为{{}}
  • v-html指令的作用是:设置元素的innerHTML

二、显示切换,属性绑定

v-show指令的作用是:根据表达式的真假,切换元素的显示与隐藏

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

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

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

数据改变之后,对应元素的显示状态会同步更新

<body>
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
    <div id="app">
        <input type="button" value="切换状态" @click="changeShow">
        <input type="button" value="增加年龄" @click="addAge">
        <br>
        <img v-show="isShow" src="ss.gif" height="300px">
        <img v-show="age>=17" src="ss.gif" height="200px">

    </div>
    
    <script>
        var app = new Vue({
            el:"#app",
            data:{
                isShow:false,
                age:16
            },
            methods:{
                changeShow:function(){
                    this.isShow = !this.isShow;
                },
                addAge:function(){
                    this.age++;
                }
            }
        });
    </script>
</body>

v-if:根据表达式的真假,切换元素的显示和隐藏

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

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

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

<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
    <div id="app">
        <!-- <button  value="按钮切换">按钮切换</button> -->
        <input type="button" value="按钮切换" @click="toggle">
        <p v-if="temp>20">我吃饭了</p>
        <p v-if="isShow">if修饰显示</p>
        <p v-show="isShow">show修饰显示</p>
    </div>
    <script>
        var app = new Vue({
            el: "#app",
            data: {
                isShow: false,
                temp: 21
            },
            methods: {
                toggle: function () {
                    this.isShow = !this.isShow;
                }
            }
        });
    </script>

 

v-bind指令的作用是:设置元素的属性(比如:src,title,class)

v-bind:属性名=表达式

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

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

需要动态的增删class建议使用对象的方式

<body>
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
    <div id="app">
        <img v-bind:src="src" alt="">
        <img v-bind:src="src" alt="" :title="imgTitle">
        <p v-bind:class="isActive?'active':''">abaaba</p>
        <p :class="{active:isActive}">我努力</p>
    </div>
    <script>
        var app = new Vue({
            el: "#app",
            data: {
                src: "ss.gif",
                imgTitle: "图片",
                isActive: true
            },
            methods: {

            }
        });
    </script>
</body>

小案例:

切换图片

<body>
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
    <div id="app">
        <input type="button" v-show="index!=0" @click="prev" value="上一张">
        <input type="button" v-show="index <imgArr.length-1" @click="next" value="下一张">
        <br>
        <img :src="imgArr[index]" alt="">

    </div>
    <script>
        var app = new Vue({
            el: "#app",
            data: {
                imgArr: [
                    "./images/Snipaste_2022-01-12_11-09-05.png",
                    "./images/Snipaste_2022-01-12_11-09-19.png",
                    "./images/Snipaste_2022-01-12_11-09-27.png",
                    "./images/Snipaste_2022-01-12_11-09-34.png",
                    "./images/Snipaste_2022-01-12_11-09-40.png"
                ],
                index: 0
            },
            methods: {
                prev: function () {
                    this.index--;
                },
                next: function () {
                    this.index++;
                }
            }
        });
        console.log(imgArr);
    </script>
</body>

 

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

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

数组经常和v-for结合使用

语法是(item,index)in 数据

item和index可以结合其他指令一起使用

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

<body>
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
    <div id="app">
        <div v-for="(item,index) in arr">
            {{item}} {{index}}
        </div>
        <div v-for="(item,index) in people">
            {{item.name}}{{item.age}}
        </div>
    </div>
    <script>
        var app = new Vue({
            el: "#app",
            data: {
                arr: [1, 2, 3, 4, 5],
                people: [
                    { name: "rose", age: 18 },
                    { name: "lisa", age: 19 },
                ]
            },
            methods: {

            }
        });
    </script>
</body>

 

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

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

定义方法时需要定义形参来接受传入的参数

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

.enter可以限制触发的按键为回车

事件修饰符有多种

<body>
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
    <div id="app">
        <div @click="fn(3,4)" class="c1"></div>
        <input type="text" @keyup.enter="f1()" class="c2">{{msg}}
    </div>
    <script>
        var app = new Vue({
            el: "#app",
            data: {
                msg: 12
            },
            methods: {
                fn: function (a, b) {
                    console.log(a + b);
                },
                f1: function () {
                    this.msg++;
                    console.log(this.msg);
                }
            }
        });
    </script>
</body>

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

指令的作用是便捷的设置和获取表单元素的值

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

绑定的数据<- ->表单元素的值

<body>
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
    <div id="app">
        <input type="button" @click="setM()" value="设置值">
        <input type="button" v-model="message" @keyup.enter="getM()">
        <div>{{message}}</div>

    </div>
    <script>
        var app = new Vue({
            el: "#app",
            data: {
                message: "欢迎哦"
            },
            methods: {
                setM: function () {
                    this.message = "艾克阿达"
                },
                getM: function () {
                    alert(this.message)
                }
            }
        });
    </script>
</body>

小案例:

完成记事本的新增、删除、统计、清空、隐藏功能

Webpack

Webpack 是一个前端资源加载/打包工具。它将根据模块的依赖关系进行静态分析,然后将这些模块按照指定的规则生成对应的静态资源。

Webpack 可以将多种静态资源 js、css、less 转换成一个静态文件,减少了页面的请求。

Vue组件中父传子、子传父,非父子组件传值

http://t.csdn.cn/YWegb

项目中遇到的是这样子的:

父页面中组件引入:

 

子页面中

 

 父组件中@add也就是子组件中$emit返回add的时候运行父组件js中的test方法

在父组件中编写test方法,调用另一个组件(ref的名字)中的open方法顺便把数据传过去。

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值