Vue学习笔记-基础至整合Element-UI

Vue学习笔记-基础至整合Element-UI

ECMAScript是浏览器脚本语言的规范,而各种我们熟知的js语言,如Javascript则是规范的具体实现.

VSCode快捷键

  1. Alt + Shift + F 代码整理
  2. Ctrl + ` 终端
  3. 左栏直接 全局搜索

ES6

经常使用Let、Const

  1. Let  1. 作用域在所处的大括号中  2. 不可声明多次      3.不存在变量提升
  2. var  1. 全局作用域        2. 一个变量可声明多次   3. var会变量提升未定义undefined
  3. const 1. 声明之后不允许改变    2. 一旦声明必须切始化
	//解构表达式 ,数组直接赋值a,b,c
	let arr =[123]
	let [a,b,c] = arr
	
<!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>Document</title>
</head>

<body>
    <script>
        //解构表达式
        let arr = [1, 2, 3]
        let [a, b, c] = arr

        //对象结构
        const person = {
            name: "刘邦",
            age: 21,
            language: ['java', 'js', 'css']
        }
        const { name, age, language } = person
        console.log(name, age, language)
        let str = "hhgdaa";

        //字符串扩展  API
        //str.startsWith,endsWith,includes,
        //字符串模板
        let ss = ` ahgjdhasdjkf ${name}  jfkdsajf ${age} 此模板中也可 `
        console.log(ss);
     
        var print  = function(obj){
            console.log(obj);
        }
        //箭头函数优化
        var print2 = obj =>console.log(obj);
        print2("宋康")
        var sum = (a,b)=>(a+b)
        var sum3 = (a,b)=>{
            c = a+b
            return c+a
            } 
        console.log(sum(1,2));
        console.log(sum3(1,2));
        
        //箭头函数+解构  
        var hello2= ({name}) => console.log("箭头函数+解构"+name);
        hello2(person);

        //对象优化
            // Object.assign()
            console.log(Object.keys(person))
            console.log(Object.values(person))
            console.log(Object.entries(person))
        
        //对象的函数属性简写
        let person3 ={
            name:"song",
            eat:function(food){console.log(food); },
            eat2:food => console.log(food),  //箭头函数中不能使用this
            eat3(food){ console.log(food); }
        }

        //深拷贝  ...
        let p1 = {name:"kkk",age:18}
        let s1 = {...p1}
        console.log(s1);

        //ES6   import 导入的文件必须指定好了导出 export
        //import abc from './xxx.js'    前面的名字要对应另一个文件中导出指定的名字    export{abc}
        //export default {  sum(a,b){  return a+b  } }  此种不需指定

    </script>
</body>
</html>

1. Vue安装

npm init -t  		  //初始化项目  生成package.json代表npm来管理的项目
npm install vue 	  //如果报错  修改package.json中的name字段的值 和正在安装的名不同
上如果出现的报错类型用上结局方法:
npm ERR! Refusing to install package with name “vue“ under a package

组件化概念

   不同页面就可以共享这些组件,避免重复开发。

  Vue生命周期图

2. 安装webpack

	npm  install  webpack  -g  	

3.安装vue脚手架

	npm  install  -g  @vue/cli-init

4. 初始化vue项目

	vue  init  webpack  appname   //vue脚手架 使用webpack模板 初始化一个appname项目

  遇到的错误:
    无法加载文件 C:\Users…\AppData\Roaming\npm\vue.ps1
    因为在此系统禁止运行脚本

	 #命令行输入	
	 set-ExecutionPolicy RemoteSigned 	

  运行npm run dev

.Vue文件三大要素

		<template>
		<javascript>
		<style>
    <router-link to="/hello">我的Vue页面</router-link>`   //需要路由.js中配合
    <router-view>  //动态视图,路由一变  视图会动态改变此区域,部分改变页面使用
<!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>Document</title>
</head>

<body>
    <id id="app">
        {{msg}}
        <input type="text" v-model="num">
        <button v-on:click="num++">num++</button>
        <button v-on:click="cancle">num--</button>
        <p>{{name}}年龄 {{num}}</p>
        {{msg}}
        <a v-bind:href="link">baidu</a>
        <span v-bind:class="{active: isActive}" v-bind:style="{color:color1}">span</span>

        <br><input type="checkbox" v-model="language" value="java">java<br>
        <input type="checkbox" v-model="language" value="sql">sql<br>
        <input type="checkbox" v-model="language" value="vue">vue<br>
        {{language.join(",")}}
        <p>总价: {{totalPrice}}</p>

        <!-- //过滤器 -->
        <p>性别{{ person.gender | genderFilter }}</p>
        <p>性别{{ person.gender | gFilter }}</p>

        <!-- //组件复用 -->
        <button v-on:click="num++">点击了{{num}}次</button>
        <counter></counter>
        <counter></counter>
        <counter></counter>
        <br>
        <button-counter></button-counter>
        <button-counter></button-counter>
        <button-counter></button-counter>

        </div>

        <script src="./node_modules/vue/dist/vue.js"></script>
        <script>

            //全局过滤器 要放最上面
            Vue.filter("gFilter", function (val) {
                if (val == 1) {
                    return "男"
                } else {
                    return "女"
                }
            })
            //全局声明一个组件
            Vue.component("counter", {
                template: `<button v-on:click="num++">点击了{{num}}次</button>`,
                data() {  //data必须是一个函数,不能是一个对象,保独立
                    return {  //可以使每一个方法都有独立的num
                        num: 1
                    }
                }
            })
            //局部声明一个组件
            const buttonCounter = {
                template: `<button v-on:click="num++">点击了{{num}}次</button>`,
                data() {
                    return {
                        num: 1
                    }
                }
            }


            //数据绑定
            let vm = new Vue({
                el: "#app",  //绑定元素
                data: {
                    name: "嬴政",
                    num: 29,
                    msg: "jjjjjj",
                    link: "https://www.baidu.com",
                    color1: "red",
                    isActive: true,
                    language: [],
                    person: { gender: 1 }

                },  //封装数据
                methods: {       //封装方法
                    cancle() {
                        this.num--;
                    }
                },
                computed: {      //计算属性
                    totalPrice() {
                        //只要动态绑定的数据发生了变化就会触发计算 
                    }
                },
                watch: {         //监听器
                    num(newVal, oldVal) {
                        if (newVal > 30) {
                            this.msg = "年龄超出限制"
                            this.num = 30
                        }
                        if (newVal < 30) {
                            this.msg = ""
                        }
                    }
                },
                filters: {  //过滤器
                    genderFilter(val) {
                        if (val == 1) {
                            return "男"
                        } else {
                            return "女"
                        }
                    }
                },
                components: {
                    'button-counter': buttonCounter
                },
                beforeCreate() {
                    console.log("=========beforeCreate=============");
                    console.log("数据模型未加载:" + this.name, this.num);
                    console.log("方法未加载:" + this.show());
                    console.log("html模板未加载:" + document.getElementById("num"));
                },
                created: function () {
                    console.log("=========created=============");
                    console.log("数据模型已加载:" + this.name, this.num);
                    console.log("方法已加载:" + this.show());
                    console.log("html模板已加载:" + document.getElementById("num"));
                    console.log("html模板未渲染:" + document.getElementById("num").innerText);
                },
                beforeMount() {
                    console.log("=========beforeMount=============");
                    console.log("html模板未渲染:" + document.getElementById("num").innerText);
                },
                mounted() {
                    console.log("=========mounted=============");
                    console.log("html模板已渲染:" + document.getElementById("num").innerText);
                },
                beforeUpdate() {
                    console.log("=========beforeUpdate=============");
                    console.log("数据模型已更新:" + this.num);
                    console.log("html模板未更新:" + document.getElementById("num").innerText);
                },
                updated() {
                    console.log("=========updated=============");
                    console.log("数据模型已更新:" + this.num);
                    console.log("html模板已更新:" + document.getElementById("num").innerText);
                }
            })


        //v-model=  绑定数据  双向绑定
        ///v-on:click= 绑定事件   @click=""  @为简写符号    @click.stop=""   阻止冒泡
        //v-test=    v-html=
        //v-bind:属性名=   单向绑定    :只写:为简写
        //按键修饰符: @keyup.up="num++"   @keyup.down="num--"
        //<li>v-for="{user,index} in users">     {{user}}  //index为当前元素的索引  可遍历数组也可遍历map
        //<li>v-for="{k,v,i} in users">   {{k,v,i}} //遍历map
        //v-if  v-else-if //为直接不显示        v-show  //为dom隐藏,但代码还有
        //计算属性 computed,监听器watch,过滤器filters  | 为管道符

        </script>
</body>

</html>

Vue生命周期图
在这里插入图片描述

5. Element-ui

	npm i element-ui  			//安装Element-ui
	
	# main中导入Element-ui
	import ElementUI from 'element-ui';
	import 'element-ui/lib/theme-chalk/index.css';
	Vue.use(ElementUI);

router-view 动态视图,路由一变 视图会动态改变此区域

整合Element-UI过程

  1. 官网复制布局代码,到App.vue
  2. 抽取其中 <el-main 标签中 内容 成一个独立的Vue组件,此控制的是显示的具体页面内容
    <router-view 标签替换
  3. 配置路由 router/index.js中添加此标签的路由管理
  4. 查看Element官方文档 <el- menu 标签添加router=“true”属性
  5. <el-menu-item index="/table" index中控制跳转路由
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值