nodejs

1. ES6新特性

1.1 let、var、const的区别

var在作用域外还能访问,let只作用在声明的区域内,const赋值后不能被修改

1.2 解构表达式

//针对普通数组进行解构
let arr = [1,2,3];
const [x,y,z] = arr;
console.log(x);
console.log(y);
console.log(z);

//针对对象
const person = {
    name:"奥力给",
    age:21,
    language: ['java','javaee','spring']
}
const {name,age,language} = person
console.log(name)
console.log(age)
console.log(language)

1.3 函数优化

//当调用时若不传参数b,则默认b=1
function add(a , b = 1) {
    return a + b;
}

1.4 箭头函数

//如果有多行代码啊  可以用{}括起来
let sum2 = (a,b) => {
    console.log(a)
    console.log(b)
    return a+b
}
//调用
console.log(sum2(1,2))

1.5 set和map结构

1.5.1 set

Set,本质与数组类似。不同在于Set中只能保存不同元素,如果元素相同会被忽略。

创建set

// Set构造函数可以接收一个数组或空
let set = new Set();
set.add(1);// [1]
// 接收数组
let set2 = new Set([2,3,4,5,5]);// 得到[2,3,4,5]

普通方法

set.add(1);// 添加
set.clear();// 清空
set.delete(2);// 删除指定元素
set.has(2); // 判断是否存在
set.keys();// 返回所有key
set.values();// 返回所有值
set.entries();// 返回键值对集合
// 因为set没有键值对,所有其keys、values、entries方法返回值一样的。
set.size; // 元素个数。是属性,不是方法。

1.5.2 map

map,本质是与Object类似的结构。不同在于,Object强制规定key只能是字符串。而Map结构的key可以是任意对象。即:
● object是 <string,object>集合
● map是<object,object>集合

创建map

// map接收一个数组,数组中的元素是键值对数组
const map = new Map([
    ['key1','value1'],
    ['key2','value2'],
])
// 或其它map
const map3 = new Map(map);

普通方法

map.set(key,value);// 添加
map.clear();// 清空
map.delete(2);// 删除指定元素
map.has(2); // 判断是否存在
map.keys();// 返回所有key
map.values();// 返回所有值
map.entries();// 返回键值对集合
map.size; // 元素个数。是属性,不是方法。

1.6 模块化

类似于java中包的概念
模块功能主要由两个命令构成:export和import。
● export命令用于规定模块的对外接口,
● import命令用于导入其他模块提供的功能。

1.6.1 导出

导出方式1:

export let star = '奥利给';
export function sing(){
    console.log('奥利给唱歌')
}

导出方式2:

let star = '奥利给';
function sing(){
    console.log('奥利给唱歌')
}
export {star, sing}

1.6.2 导入

导入方式1:

<script type="module">
	//普通导入,根据别名调用
    import * as m1 from './hello.js'
    console.log(m1)
    console.log(m1.star)
</script>

导入方式2:

<script type="module">
    //解构表达式导入
    import {star, sing} from './hello.js'
    console.log(star)
    sing()
</script>

2. Vue

Model:模型,其中存放数据信息
View:视图,展示给用户的页面

2.1 Vue入门

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <!--这里div代表视图视图-->
    <div id="app">
        <h2>{{name}},非常帅</h2>
    </div>
</body>
    <script src="node_modules/vue/dist/vue.js"></script>
    <script>
        //创建并初始化vue实例模型
        let app = new Vue({
            //为实例绑定视图
            el:'#app',
            //定义模型中的数据
            data:{
                name:"龙龙"
            }
        })
    </script>
</html>

在这里插入图片描述

2.2 双向绑定

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <!--这里div代表视图视图-->
    <div id="app">
        <h2>{{name}},非常帅!有{{num}}位女生喜欢他</h2>
        <!--为输入框绑定模型中的数据-->
        <input type="text" v-model="num">
        <!--为点击事件绑定操作模型中数据的事件-->
        <button v-on:click="num++"></button>
    </div>
</body>
    <script src="node_modules/vue/dist/vue.js"></script>
    <script>
        //创建并初始化vue实例模型
        let app = new Vue({
            //为实例绑定视图
            el:'#app',
            //定义模型中的数据
            data:{
                name:"龙龙",
                num:99
            }
        })
    </script>
</html>

在这里插入图片描述
当输入框输入数据,或点击按钮时,上面的文字内容也会改变

2.3 Vue实例中的方法

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <!--这里div代表视图视图-->
    <div id="app">
        {{num}}
        <!--点击按钮时调用vue实例中的方法-->
        <button v-on:click="add">+</button>
    </div>
</body>
    <script src="node_modules/vue/dist/vue.js"></script>
    <script>
        //创建并初始化vue实例模型
        let app = new Vue({
            //为实例绑定视图
            el:'#app',
            //定义模型中的数据
            data:{
                num:1
            },
            methods:{//定义模型中方法
                //当add调用时,让num值增加
                add:function (){
                    //this代表当前vue实例
                    this.num++;
                }
            }
        })
    </script>
</html>

点击+就能调用vue实例中的add方法,改变视图中的数据
在这里插入图片描述

2.4 v-text和v-html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <!--这里div代表视图视图-->
    <div id="app">
        v-text:<span v-text="hello"></span><br/>
        v-html:<span v-html="hello"></span>
    </div>
</body>
    <script src="node_modules/vue/dist/vue.js"></script>
    <script>
        //创建并初始化vue实例模型
        let app = new Vue({
            //为实例绑定视图
            el:'#app',
            //定义模型中的数据
            data:{
                hello:'<h1>ikun</h1>'
            }
        })
    </script>
</html>

在这里插入图片描述
v-text不会解析数据中的html内容,而v-html会解析html内容

v-text和v-html是单向绑定,只能在修改vue实例中数据后改变视图中显示的内容,但若直接修改视图中显示的内容则不能影响vue实例中数据的值

2.5 v-model

v-model可以实现双向绑定,即模型和视图可以互相影响,用户通过页面数据元素修改内容,也能影响模型中对应的数据的值

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <!--这里div代表视图视图-->
    <div id="app">
    	<!--通过v-model为当前页面的输入元素绑定模型中的数据-->
        <input type="checkbox" v-model="language" value="Java" />Java<br/>
        <input type="checkbox" v-model="language" value="Js" />Js<br/>
        <input type="checkbox" v-model="language" value="PHP" />PHP<br/>
        <!--对模型中的数据进行实时显示-->
        <h1>
            你选择了:{{language.join(',')}}
        </h1>
    </div>
</body>
    <script src="node_modules/vue/dist/vue.js"></script>
    <script>
        //创建并初始化vue实例模型
        let app = new Vue({
            //为实例绑定视图
            el:'#app',
            //定义模型中的数据
            data:{
                language:[]
            }
        })
    </script>
</html>

在这里插入图片描述

2.5 v-on

用于给页面视图元素绑定事件,语法如下

v-on:事件名="js片段或函数名"

例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <!--这里div代表视图视图-->
    <div id="app">
        <h2>{{name}}</h2>
        <h2>{{num}}</h2>
        <!--通过js代码-->
        <button v-on:click="num++">+</button>
         <!--通过调用模型方法,可以用@代替v-on:-->
        <button @click="decrement">-</button>
    </div>
</body>
    <script src="node_modules/vue/dist/vue.js"></script>
    <script>
        //创建并初始化vue实例模型
        let app = new Vue({
            //为实例绑定视图
            el:'#app',
            //定义模型中的数据
            data:{
                name:"ikun",
                num:100
            },
            methods:{
                decrement (){
                    this.num--;
                }
            }
        })
    </script>
</html>

2.6 v-for

语法:

v-for="item in items"

● items:要遍历的数组,需要在vue的data中定义好。
● item:迭代得到的数组元素的别名

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<!--    这里div代表视图视图-->
    <div id="app">
        <!--不需要下标的循环-->
        <li v-for="user in users">
            {{user.name}}-{{user.age}}
        </li>
        <br>
        <!--需要下标的循环-->
        <li v-for="(user,index) in users">
            {{index+1}} {{user.name}}-{{user.age}}
        </li>
    </div>
</body>
    <script src="node_modules/vue/dist/vue.js"></script>
    <script>
        //创建并初始化vue实例模型
        let app = new Vue({
            //为实例绑定视图
            el:'#app',
            //定义模型中的数据
            data:{
                users:[
                    {name:'奥利给', gender:'女', age: 21},
                    {name:'王总', gender:'男', age: 18},
                    {name:'二龙', gender:'女', age: 24}
                ]
            },
        })
    </script>
</html>

在这里插入图片描述

2.6 v-if和v-show的区别

v-if只有当条件成立时才会渲染,而v-show不管是否成立都会渲染,当条件不成立时会将其display属性设置为none

2.7 v-bind

将模型的数据绑定到html标签的属性上

<div id="app">
    <!--将模型中的tiltle数据值绑定到div元素的title属性上-->
    <div v-bind:title="title" style="border: 1px solid red; width: 50px; height: 50px;"></div>
</div>
<script src="./node_modules/vue/dist/vue.js"></script>
<script type="text/javascript">
    var app = new Vue({
        el: "#app",
        data: {
            title: "奥利给",
        }
    })
</script>

2.7 计算属性

定义计算属性

var vm = new Vue({
    el:"#app",
    data:{
        birthday:1629999123201 // 毫秒值
    },
    //定义计算属性
    computed:{
        birth(){// 计算属性本质是一个方法,但是必须返回结果
            const d = new Date(this.birthday);
            return d.getFullYear() + "-" + d.getMonth() + "-" + d.getDay();
        }
    }
})

调用计算属性

 <div id="app">
    <h1>您的生日是:{{birth}} </h1>
 </div>

计算属性和普通方法的区别:使用计算属性时,当其中计算的数据没有修改时,后续调用时不会再进行调用,而是直接取得之前计算的结果,而如果是普通方法,则每次调用时都会执行

2.8 watch

watch可以让我们监控一个值的变化。从而做出相应的反应

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<!--    这里div代表视图视图-->
    <div id="app">
    	<!--将输入框内容绑定到模型的msg上-->
        <input type="text" v-model="msg">
    </div>
</body>
    <script src="node_modules/vue/dist/vue.js"></script>
    <script>
        //创建并初始化vue实例模型
        let app = new Vue({
            //为实例绑定视图
            el:'#app',
            //定义模型中的数据
            data:{
                msg:""
            },
            //监控msg的变化,并打印出两个值
            watch:{
                msg(newVal,oldVal){
                    console.log(newVal,oldVal);
                }
            }
        })
    </script>
</html>

2.9 组件化

在大型应用开发的时候,页面可以划分成很多部分。往往不同的页面,也会有相同的部分。例如可能会有相同的头部导航。

但是如果每个页面都独自开发,这无疑增加了我们开发的成本。所以我们会把页面的不同部分拆分成独立的组件,然后在不同页面就可以共享这些组件,避免重复开发。

2.9.1 全局组件

我们通过Vue的component方法来定义一个全局组件。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<!--    这里div代表视图视图-->
    <div id="app">
        <!--使用全局组件,注意组件必须要在绑定了vue实例的元素内才能使用-->
        <counter></counter>
        <!--可以多次复用,且每个组件中的数据相互独立,互补影响-->
        <counter></counter>
        <counter></counter>
    </div>
</body>
    <script src="node_modules/vue/dist/vue.js"></script>
    <script>
        //定义全局组件,参数1是组件名称,参数2是组件参数
        Vue.component("counter",{
            //template代表组件中的视图
            template:'<button @click="num++">我被点击了{{num}}次</button>',
            //data代表当前组件中的模型数据
            data(){
                return{
                    num:0
                }
            }
        });
        //创建并初始化vue实例模型
        let app = new Vue({
            //为实例绑定视图
            el:'#app',
        })
    </script>
</html>

2.9.2 局部组件

一旦全局注册,就意味着即便以后你不再使用这个组件,它依然会随着Vue的加载而加载,因此,对于一些并不频繁使用的组件,我们会采用局部注册。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<!--    这里div代表视图视图-->
    <div id="app">
        <!--使用局部组件-->
        <counter></counter>
    </div>

    <div id="app1">
        <!--因为为app1绑定的vue实例中并没有挂载counter局部组件,所以这里调用失败-->
        <counter></counter>
    </div>
</body>
    <script src="node_modules/vue/dist/vue.js"></script>
    <script>
        //定义局部组件
        const counter={
            //template代表组件中的视图
            template:'<button @click="num++">我被点击了{{num}}次</button>',
            //data代表当前组件中的模型数据
            data(){
                return{
                    num:0
                }
            }
        }
        //创建并初始化vue实例模型
        let app = new Vue({
            //为实例绑定视图
            el:'#app',
            components:{
                //挂载局部组件,只能在绑定了当前vue实例的页面视图元素中使用这个组件
                //组件名:组件内容
                //myCounter:counter,        //在id为app的元素内调用时要使用myCounter
                //当只声明局部组件名时,调用组件时的名字就是局部组件名,在id为app的元素内调用时就使用counter
                counter
            }
        })
        //创建并初始化vue实例模型
        let app1 = new Vue({
            //为实例绑定视图
            el:'#app1',
        })
    </script>
</html>

2.9.3 组件通信

组件之间可以互相嵌套,形成父子组件

2.9.3.1 父组件传递参数给子组件

规则:

  1. 定义子组件时,通过props接收父组件数据,其中定义接收父组件数据的数据名
  2. 调用子组件并使用父组件时数据时,自定义对应的数据名(数据名任意,与props中定义的名字要一致,后面跟要传递的数据在父组件中的数据名)
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<!--    这里div代表视图视图-->
<div id="app">
    <!--:num1为在子组件counter的props中声明的名字,后面为父组件中的数据名-->
    <counter :num1="num"></counter>
</div>
</body>
<script src="node_modules/vue/dist/vue.js"></script>
<script>
    //定义全局组件,参数1是组件名称,参数2是组件参数
    Vue.component("counter",{
        //template代表组件中的视图
        template:'<button v-on:click="num1++">我被点击了{{num1}}次</button>',
        //声明在子组件中用num1代表父组件中的对应数据
        props:["num1"]
    });
    //创建并初始化vue实例模型
    var app = new Vue({
        //为实例绑定视图
        el:'#app',
        //num属于父组件中的数据
        data:{
            num:10
        }
    })
</script>
</html>

传递过程:
在这里插入图片描述

2.9.3.2 父组件传递方法给子组件
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<div id="app">
    <h2>num:{{num}}</h2>
    <!--使用全局组件,注意组件必须要在绑定了vue实例的元素内才能使用-->
    <counter :num="num" @inc="add" @dec="minus"></counter>
</div>
</body>
<script src="../node_modules/vue/dist/vue.js"></script>
<script>
    //定义全局组件,参数1是组件名称,参数2是组件参数
    Vue.component("counter",{
        template:'\
             <div>\
                <button @click="plus">加</button>\
                <button @click="reduce">减</button>\
             </div>',
        props:["num"]
        ,methods:{
            plus(){
                this.$emit("inc");
            },
            reduce(){
                this.$emit("dec");
            }
        }
    });
    var app = new Vue({
        el:"#app",
        data:{
            num:0
        },
        methods:{ // 父组件中定义操作num的方法
            add(){
                this.num++;
            },
            minus(){
                this.num--;
            }
        }
    })
</script>
</html>

调用过程
在这里插入图片描述

2.10 vue-router

安装:
npm install vue-router@2.0.0

定义登录组件

const loginForm = {
    template:"<div>" +
                "<h2>登录页</h2>" +
                "用户名<input type='text'>" +
                "密码<input type='password'>" +
             "</div>"
}

定义注册组件

const registerForm = {
    template:"<div>" +
                "<h2>注册页</h2>" +
                "用户名<input type='text'>" +
                "密码<input type='password'>" +
                "确认密码<input type='password'>" +
             "</div>"
}

编写主页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <div id="app">
        <!--to当中填写路由地址,点击时就会访问对应的path-->
        <span><router-link to="/login">登录</router-link></span>
        <span><router-link to="/register">注册</router-link></span>
        <div>
            <!--路由锚点-->
            <router-view></router-view>
        </div>
    </div>
</body>
<script src="../node_modules/vue/dist/vue.js"></script>
<script src="user/login.js"></script>
<script src="user/register.js"></script>
<!--引入路由js文件-->
<script src="../node_modules/vue-router/dist/vue-router.js"></script>
<script>
    //创建VueRouter
    const  router = new VueRouter({
        routes:[    //配置路由规则,当对应的path被访问时,其中的component就会被加载到页面的锚点上
            {
                //请求路径,以/开头
                path: '/login',
                //要加载的组件名称
                component:loginForm
            },
            {
                //请求路径,以/开头
                path: '/register',
                //要加载的组件名称
                component:registerForm
            }
        ]
    })
    var app = new Vue({
        el:"#app",
        components:{
            loginForm,
            registerForm
        },
        //引用router对象
        router
    })
</script>
</html>

通电点击事件切换组件
在这里插入图片描述
在这里插入图片描述

2.11 vue-cli

创建脚手架项目
vue create 项目名称

启动脚手架内置服务器
npm run serve

打包项目
npm run build

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值