首页 > 其他分享 >计算、监听属性与组件化开发与vue-cli

计算、监听属性与组件化开发与vue-cli

时间:2022-10-30 22:14:59浏览次数:48  
标签:vue cli abc var Vue 组件 监听 name

计算属性

1.如果使用{{函数()}},每次页面刷新函数都会执行,会很消耗资源,如果放在computed中,只有变量发生变化,他才重新运算,使用时不需要加括号,{{属性}}即可

2.实例
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="js/vue.js"></script>
</head>
<body>
<div id="app">
    <h1>计算属性</h1>
    <input type="text" v-model="name">{{handleUpper()}}
    <hr>
    <input type="text" v-model="name1">{{upper}}
</div>
</body>
<script>
    var vm = new Vue({
        el: '#app',
        data: {
            name: '',
            name1: '',
        },
        methods: {
            handleUpper() {
                // 只要页面刷新就会变化
                console.log('页面刷新了')
                // 截出首字母转成大写
                return this.name.slice(0, 1).toUpperCase() + this.name.slice(1)
            },
        },
        computed: {
                upper() {
                    // 只要涉及到计算属性中使用的变量发生变化,他才重新运算
                    console.log('计算属性执行了')
                    return this.name1.slice(0, 1).toUpperCase() + this.name1.slice(1)
                }
            }
    })
</script>
</html>

计算属性重写过滤

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="js/vue.js"></script>
</head>
<body>
<div id="app">
    <h1>过滤案例</h1>
    <p><input type="text" v-model="search" placeholder="输入搜索内容" @input="handleSearch"></p>
    <ul>
        <li v-for="i in newdataList">{{i}}</li>
    </ul>
</div>
</body>
<script>
    var vm = new Vue({
        el: '#app',
        data: {
            search: '',
            dataList: ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'ab', 'abc'],
        },
        computed: {
            newdataList() {
                // 计算属性一定要return,计算属性的值就是我们return的值
                return this.dataList.filter(i => i.indexOf(this.search) >= 0)
            }
        }
    })
</script>
</html>

监听属性

1.当被监听属性发生变化,就执行一个函数

2.实例
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="js/vue.js"></script>
</head>
<body>
<div id="app">
    <h1>监听属性</h1>
    <span>
        <button @click="type='物理'">物理</button>|<button @click="type='化学'">化学</button>|<button
            @click="type='生物'">生物</button>
    </span>
    <br>
    {{type}}
</div>
</body>
<script>
    var vm = new Vue({
        el: '#app',
        data: {
            type: '物理',
        },
        watch:{
            type(val){
                console.log('修改后为:', val)
            }
        }
    })
</script>
</html>

组件化开发

组件介绍

1.组件用于扩展html元素,封装可重用代码,目的是可以重复使用

2.定义组件
-全局组件:全局可以使用,可以用在任意其它组件中
-局部组件:局部组件只能在定义的位置(组件中)使用
  • 全局、局部组件
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="js/vue.js"></script>
</head>
<body>
<div id="app">
    <h1>全局组件</h1>
    <child></child>
    <hr>
    <h1>局部组件</h1>
    <abc></abc>
    <hr>
</div>

</body>
<script>
    // 定义全局组件,组件有自己的数据、方法、生命周期
    var obj = {
        template: `
          <div>
          <button>后退</button>
          {{ title }}
          <button @click="handleClick">前进</button>
          </div>`,
        data() {
            return {
                title: '标题',
            }
        },
        methods: {
            handleClick() {
                alert('前进')
            }
        },
    }
    Vue.component('child', obj)

    // 局部组件
    var abc = {
        template: `
          <div>
          <button>我是abc</button>
          {{ name }}
          <child1></child1>
          <child></child>
          </div>`,
        data() {
            return {name: 'abc'}
        },
        components: {
            'child1': {
                template: `<div>
          <h2>anc内部的组件</h2>
          </div>`
            }
        }
    }

    var vm = new Vue({
        el: '#app',
        data: {},
        components: {
            abc
        }
    })
</script>
</html>

父子通信之父传子

1.组件和组件之间的数据、方法都是隔离的,要进行通信才能使用

2.实例
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="js/vue.js"></script>
</head>
<body>
<div id="app">
    <h1>父传子</h1>
    {{name}}
    <abc :myname="name"></abc>
</div>

</body>
<script>
    // 局部组件
    var abc = {
        template: `
          <div>
          <h1>我是abc组件</h1>
          {{ myname }}
          </div>`,
        props:['myname'],
        created(){
            console.log(this.name)
        }
    }

    var vm = new Vue({
        el: '#app',
        data: {
            name: 'barry',
        },
        components: {
            abc
        }
    })
</script>
</html>

父子通信之子传父

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="js/vue.js"></script>
</head>
<body>
<div id="app">
    <h1>子传父</h1>
    父组件的name值:{{name}}
    <hr>
    <abc @myevnet="handleEvent"></abc>
    <hr>
</div>

</body>
<script>
    // 局部组件
    var abc = {
        template: `
          <div>
          <button>我是abc组件</button>
          <input type="text" v-model="name">{{ name }}
          <br>
          <button @click="handleClick">点击传name给父组件</button>
          </div>`,
        data() {
            return {name: ''}
        },
        methods: {
            handleClick() {
                this.$emit('myevnet', this.name)
            }
        }
    }

    var vm = new Vue({
        el: '#app',
        data: {
            name: 'barry'
        },
        methods: {
            handleEvent(name) {
                this.name = name
            }
        },
        components: {
            abc
        }
    })
</script>
</html>

ref属性

1.可以放在普通标签上,通过(this.$refs.自定义的名字)取到原生的dom对象,也可以使用原生dom对象操作

2.可以放在组件上:通过(this.$refs.自定义的名字)取到vc对象(组件对象),可以使用组件对象上的方法和属性。子组件的数据给了父组件
-父组件有个方法执行,需要传参数,传入子组件的数据。子组件的数据给了父组件
-拿到子对象直接使用父的数据修改。父的数据传给子
  • 实例
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="js/vue.js"></script>
</head>
<body>
<div id="app">
    <h1>ref属性</h1>
    <input type="text" ref="myinput" v-model="name">{{name}}
    <br>
    <button @click="handleClick">点我</button>
    <hr>
    <h1>ref属性放在组件上</h1>
    <abc ref="myabc"></abc>
</div>
</body>
<script>
    // 局部组件
    var abc = {
        template: `
          <div>
          <button>后退</button>
          首页-{{ age }}-{{ show }}
          <button @click="handleQJ">前进</button>
          </div>`,
        data() {
            return {show: true, age: 20}
        },
        methods: {
            handleQJ(){
                alert('前进')
            }
        }
    }

    var vm = new Vue({
        el: '#app',
        data: {
            name: 'barry'
        },
        methods: {
            handleClick() {
                console.log(this.$refs)
                this.$refs.myabc.age = 666
                this.$refs.myabc.show = false
                this.$refs.myabc.handleQJ()
            }
        },
        components: {
            abc
        }
    })
</script>
</html>

动态组件

1.使用<keep-alive>包起来,内部的输入信息就会缓存起来,而不是销毁

2.实例
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="js/vue.js"></script>
</head>
<body>
<div id="app">
    <h1>动态组件</h1>
    <div>
        <span @click="type='home'">首页</span>
        <span @click="type='goods'">商品</span>
        <span @click="type='order'">订单</span>
    </div>
    <div>
        <keep-alive>
            <component :is="type"></component>
        </keep-alive>
    </div>
</div>
</body>
<script>
    // 定义三个全局组件
    Vue.component('home',{
        template: `
          <div>
          <h1>首页</h1>
          </div>`,
    })
    Vue.component('goods',{
        template: `
          <div>
          <h1>商品</h1>
          <input type="text" placeholder="输入要搜索的商品">
          </div>`,
    })
    Vue.component('order',{
        template: `
          <div>
          <h1>订单</h1>
          </div>`,
    })

    var vm = new Vue({
        el: '#app',
        data: {
            type: 'home'
        },
    })
</script>
</html>

插槽

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="js/vue.js"></script>
</head>
<body>
<div id="app">
    <h1>插槽的使用</h1>
    <home>
        <img src="https://img2.baidu.com/it/u=3350501151,3749696733&fm=253&fmt=auto&app=138&f=JPEG?w=856&h=500"
             width="200px" height="200px">
    </home>

    <hr>
    <goods>
        <div slot="bottom">
            底部
        </div>
        <a href="" slot="top">点我看好看的</a>
    </goods>
</div>
</body>
<script>
    // 定义三个全局组件
    Vue.component('home', {
        template: `
          <div>
          <button>后退</button>
          <span>首页</span>
          <button>前进</button>
          <hr>
          <slot></slot>
          </div>`,
    })
    Vue.component('goods', {
        template: `
          <div>
          <slot name="top"></slot>
          <hr>
          <button>后退</button>
          <span>首页</span>
          <button>前进</button>
          <hr>
          <slot name="bottom"></slot>
          </div>`,
    })

    var vm = new Vue({
        el: '#app',
        data: {
            type: 'home'
        },
    })
</script>
</html>

vue-cli

vue-cli介绍

'vue的脚手架:快速帮我们创建出vue的项目'
1.vue2 和 vue3 
-vue-cli可以创建vue2和vue3的项目,创建项目慢运行项目也慢	webpack构建工具
-Vite:新一代构建工具,只能创建vue3
-vue3上,推荐使用ts写,不推荐js写

2.使用vue-cli需要先安装nodejs后端语言
-nodejs语法是js语法但不是js:js是运行在浏览器中,浏览器有它的解释器环境,不能运行在操作系统之上。把chrom浏览器的v8引擎,把它安装在操作系统上
-c语言写了内置库,这样就可以写文件操作、网络操作

3.下载官网
https://nodejs.org/zh-cn/download/
3.1安装完会释放两个命令(在环境变量中,任意路径都能敲这俩命令)
-node		python3
-npm		pip
-cnpm		等同于pip ,只是下模块,直接取淘宝镜像站下载,速度快

4.安装vue-cli,通过脚手架(vue-cli)创建vue项目
cnpm install -g @vue/cli
-只要装成功,又会多出一个可执行文件(vue)
4.1	-淘宝做了一个cnpm可执行文件,用来替换npm,以后所有使用npm的地方都换成cnpm即可
npm install -g cnpm --registry=https://registry.npm.taobao.org

5.创建vue项目
vue create myfirstvue

6.ide的选择(vscode,webstorm:jetbrains公司的,跟pycharm一家的,使用习惯一样)
-使用pycharm+vue插件也可以开发vue项目

7.运行vue项目
-方式一:在命令行中敲:npm run serve
-方式二:在pycharm中点击绿色箭头运行
![image](/i/l/?n=22&i=blog/2904381/202210/2904381-20221030215536254-1604579078.png) ![image](/i/l/?n=22&i=blog/2904381/202210/2904381-20221030215616072-1910974418.png)

image
image

标签:vue,cli,abc,var,Vue,组件,监听,name
From: https://www.cnblogs.com/riuqi/p/16842400.html

相关文章

  • 【Vue3】watch 监听器的使用
    watch的三个参数watch第一个参数,监听源watch第二个参数,回调函数cb(newVal,oldVal)watch第三个参数,一个options配置项是一个对象{immediate:true//是否......
  • vue-admin-template快速开发框架,菜单栏不显示层级结构
    问题现象路由页面效果解决办法路由添加中配置alwaysShow:true,//树形层级显示页面效果......
  • Vue表单输入绑定、组件、插槽的使用(三)
    一、表单输入绑定<!DOCTYPEhtml><html> <head> <metacharset="utf-8"> <title></title> <linkrel="stylesheet"href="https://stackpath.bootstrapcdn.com/bo......
  • Vue 脚手架编程
    1.​​Vue​​脚手架编程1.1初始化脚手架1.1.1说明​​Vue​​​脚手架是​​Vue​​官方提供的标准化开发工具(开发平台)最新的版本是​​4.x​​​​文档​​1.1.2......
  • Vue 脚手架编程
    1.1初始化脚手架1.1.1说明Vue脚手架是Vue官方提供的标准化开发工具(开发平台)最新的版本是4.x文档1.1.2具体步骤第一步(仅第一次执行):全局安装@vue/clinpm......
  • 面试宝典(vue系列五)
    ......
  • vue 绘制波形图 wavesurfer.js (音频/视频) 【实用教程】
    安装wavesurfer.jscnpmiwavesurfer.js--save无cnpm的先运行npmicnpm-g全局安装cnpm绘制音频波形图常用的配置参数详见注释。<template><divstyle="padding:......
  • 2022-10-24 ClickHouse 源码解析-查询引擎经典理论
    ​​ClickHouse源码解析:综述​​​​ClickHouse源码解析:MergeTreeWrite-Path​​​​ClickHouse源码解析:MergeTreeRead-Path​​ClickHouse源码解析:查询引擎......
  • VUE04
    1计算属性#如果{{函数()}},每次页面刷新,函数都会重新执行#函数---》当属性来使用,缓存<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8">......
  • vue-04
    计算属性1.computed--计算属性--只有涉及到计算属性中的变量发生变化它才重新运算2.不是计算属性--页面刷新就会变化<body><divid="app"><inputtype="......