day4 Vue基础

1.安装配置

项目导入vue.js//类似jquery.js
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> //不建议这样用 现在开发基本用npm来管理依赖
代码提示插件 Vue 2 Snippets
npm管理
1.新建项目文件夹 npm init -y 生成package.json文件 说明是npm项目 2. npm install vue 在node_modules里加了vue依赖
<script src="./node_modules/vue/dist/vue.js"></script>

 

2.单向绑定

注意:{{name}}只能放在标签体中 如<a href="{{name}}">xx</a>是错误的

想绑定标签的属性要用v-bind 如 <a v-bind:href="name">xx</a>也可以简化<a :href="name">xx</a>

 

标签属性中若有多个配置时 如<span style="color:red;font-size:10px">xx</span>

改成<span :style="{color:c1,font-size:f1}">xx</span>  data中c1:red,f1:10px  要特别注意的是其中v-bind绑定属性写法是个对象{}

<div id="app">
        <h1>{{name}},你好</h1>
        <h1>{{age}}岁</h1>
    </div>
    
    <script>
        new Vue({
            el:"#app",
            data:{
                name:"张三",
                age:10
            }
        })
    </script>
//new Vue中定义 el绑定选择器 data定义数据 与小程序的绑定方式一样

 

3.双向绑定 v-model

 <div id="app">
        <input type="text" v-model="num">
        <h1>{{name}},你好</h1>
        <h1>人数{{num}}</h1>
    </div>
    
    <script>
        new Vue({
            el:"#app",
            data:{
                name:"张三",
                num:10
            }
        })
    </script>
//单向绑定是js中变量改变html中也变
//双向绑定还包含了html中改变js变量也变

 

4.事件

 <div id="app">
        <button v-on:click="num++">++</button>
     <button v-on:click="cancls">- -</button>
<h1>人数{{num}}</h1>
</div>
<script>
new Vue({
            el:"#app",
            data:{
                num:10
            },
        methods:{
               cancls(){
                   this.num--;
               }
            }
        })
    </script>
//绑定事件v-on: 
//也可以简写 如v-on:click 等价于@click


 

5.v-for

v-for="value in object"
v-for="(value,key) in object"
v-for="(value,key,index) in object"

<ul>
            <li v-for="(user,index) in users" :key="user.name" v-if="user.gender == '女'">
                <!-- 1、显示user信息:v-for="item in items" -->
               当前索引:{{index}} ==> {{user.name}}  ==>   {{user.gender}} ==>{{user.age}} <br>
                <!-- 2、获取数组下标:v-for="(item,index) in items" -->
                <!-- 3、遍历对象:
                        v-for="value in object"
                        v-for="(value,key) in object"
                        v-for="(value,key,index) in object" 
                -->
                <!-- 4、遍历的时候都加上:key来区分不同数据,提高vue渲染效率 -->
            </li>            
        </ul>

 

6.监听

watch监控变量且变量必须在data中
computed用于监控多个变量或对象
例子
//watch可以让我们监控一个值的变化。从而做出相应的反应。
        new Vue({
            el: "#app",
            data: {
                xyjPrice: 99.98,
                shzPrice: 98.00,
                xyjNum: 1,
                shzNum: 1,
                msg: ""
            },
            computed: {
                totalPrice(){
                    return this.xyjPrice*this.xyjNum + this.shzPrice*this.shzNum
                }
            },
            watch: {
                xyjNum(newVal,oldVal){
                    if(newVal>=3){
                        this.msg = "库存超出限制";
                        this.xyjNum = 3
                    }else{
                        this.msg = "";
                    }
                }
            },
        })

 

7.过滤器

  <!-- 过滤器常用来处理文本格式化的操作。过滤器可以用在两个地方:双花括号插值和 v-bind 表达式 -->
    <div id="app">
        <ul>
            <li v-for="user in userList">
                {{user.id}} ==> {{user.name}} ==> {{user.gender == 1?"":""}} ==>
                {{user.gender | genderFilter}} ==> {{user.gender | gFilter}}
            </li>
        </ul>
    </div>
    <script src="../node_modules/vue/dist/vue.js"></script>

    <script>
    //过滤器案例1
        Vue.filter("gFilter", function (val) {
            if (val == 1) {
                return "男~~~";
            } else {
                return "女~~~";
            }
        })

        let vm = new Vue({
            el: "#app",
            data: {
                userList: [
                    { id: 1, name: 'jacky', gender: 1 },
                    { id: 2, name: 'peter', gender: 0 }
                ]
            },
        //过滤器案例2
            filters: {
                 filters 定义局部过滤器,只可以在当前vue实例中使用
                genderFilter(val) {
                    if (val == 1) {
                        return "";
                    } else {
                        return "";
                    }
                }
            }
        })
    </script>
    

 

8.组件

当某部分页面经常被使用时可以考虑用组件components
组件与Vue实例相比多了template少了el(组件不需要el因为不需要指定某个选择器) template就是html页面模板
<body>

    <div id="app">
        <button v-on:click="count++">我被点击了 {{count}} 次</button>

        <counter></counter>
        <counter></counter>
        <counter></counter>
        <counter></counter>
        <counter></counter>

        <button-counter></button-counter>
    </div>
    <script src="../node_modules/vue/dist/vue.js"></script>


    <script>
        //1、全局声明注册一个组件
        Vue.component("counter", {
            template: `<button v-on:click="count++">我被点击了 {{count}} 次</button>`,
            data() {
                return {
                    count: 1
                }
            }
        });

        //2、局部声明一个组件
        const buttonCounter = {
            template: `<button v-on:click="count++">我被点击了 {{count}} 次~~~</button>`,
            data() {
                return {
                    count: 1
                }
            }
        };

        new Vue({
            el: "#app",
            data: {
                count: 1
            },
            components: {
                'button-counter': buttonCounter
            }
        })
    </script>
</body>

 

9.生命周期钩子函数

了解触发时机 忘记查

      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);
            }

 

 

10.vue模块化开发

模块开发简单笔记
1.主文件是src/main.js
2.配置文件config/index.js
3.组件一般统一放在src/components下
    组件一般有3个元素 data()是方法而不是对象
<template> </template>
<script>
        export default {
            data() {
                return {
                name: '名字'
                }
        }
    }
</script>
<style> </style>  
4.在路由配置文件router/index.js中导入组件 如import Hello from '@/components/Hello' 注意组件在src中带@
  路由中配置如下:{
      path: '/hello',
      name: 'Hello组件',
      component: Hello
    }
 如果路由中还嵌套一个路由的话加上children元素 
  例:
  {
      path: '/el_container',
      name: '布局',
      component: el_container,
      children: [{
        path: '/table',
        name: 'table组件',
        component: el_table
      }]
    }
 
  最后把组件放置的位置处写上
<router-view></router-view>
 
  
              

 

vscode代码模板生成方式:文件-首选项-用户片段-文件输入vue-输入以下代码

// https://www.cnblogs.com/songjilong/p/12635448.html
{
    "Print to console": {
        "prefix": "vue", //配置后vscode输入vue后就能弹出该模板
        "body": [
            "<!-- $1 -->",
            "<template>",
            "<div class='$2'>$5</div>",
            "</template>",
            "",
            "<script>",
            "//这里可以导入其他文件(比如:组件,工具js,第三方插件js,json文件,图片文件等等)",
            "//例如:import 《组件名称》 from '《组件路径》';",
            "",
            "export default {",
            "//import引入的组件需要注入到对象中才能使用",
            "components: {},",
            "data() {",
            "//这里存放数据",
            "return {",
            "",
            "};",
            "},",
            "//监听属性 类似于data概念",
            "computed: {},",
            "//监控data中的数据变化",
            "watch: {},",
            "//方法集合",
            "methods: {",
            "",
            "},",
            "//生命周期 - 创建完成(可以访问当前this实例)",
            "created() {",
            "",
            "},",
            "//生命周期 - 挂载完成(可以访问DOM元素)",
            "mounted() {",
            "",
            "},",
            "beforeCreate() {}, //生命周期 - 创建之前",
            "beforeMount() {}, //生命周期 - 挂载之前",
            "beforeUpdate() {}, //生命周期 - 更新之前",
            "updated() {}, //生命周期 - 更新之后",
            "beforeDestroy() {}, //生命周期 - 销毁之前",
            "destroyed() {}, //生命周期 - 销毁完成",
            "activated() {}, //如果页面有keep-alive缓存功能,这个函数会触发",
            "}",
            "</script>",
            "<style scoped>",
            "//@import url($3); 引入公共css类",
            "$4",
            "</style>"
        ],
        "description": "生成vue模板"
    },
    "http-get请求": {
    "prefix": "httpget",
    "body": [
        "this.\\$http({",
        "url: this.\\$http.adornUrl(''),",
        "method: 'get',",
        "params: this.\\$http.adornParams({})",
        "}).then(({ data }) => {",
        "})"
    ],
    "description": "httpGET请求"
    },
    "http-post请求": {
    "prefix": "httppost",
    "body": [
        "this.\\$http({",
        "url: this.\\$http.adornUrl(''),",
        "method: 'post',",
        "data: this.\\$http.adornData(data, false)",
        "}).then(({ data }) => { });" 
    ],
    "description": "httpPOST请求"
    }
}

 

 

11.整合Element ui

https://element.eleme.cn/#/zh-CN/component

npm i element-ui -S  //引入element依赖 

main.js中引入element组件及样式
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
Vue.use(ElementUI);

可以在项目中直接使用element组件了 参考element官方文档

 

posted @ 2021-03-10 03:28  小白小白小白小白  阅读(50)  评论(0编辑  收藏  举报